Fix view once

This commit is contained in:
Isaac
2025-11-14 05:25:18 +08:00
parent 08ac8fa27f
commit 70a0f01951
2 changed files with 24 additions and 14 deletions

View File

@@ -119,6 +119,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
let cameraState: CameraState
let containerSize: CGSize
let previewFrame: CGRect
let safeInsets: UIEdgeInsets
let isPreviewing: Bool
let isMuted: Bool
let totalDuration: Double
@@ -135,6 +136,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
cameraState: CameraState,
containerSize: CGSize,
previewFrame: CGRect,
safeInsets: UIEdgeInsets,
isPreviewing: Bool,
isMuted: Bool,
totalDuration: Double,
@@ -150,6 +152,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
self.cameraState = cameraState
self.containerSize = containerSize
self.previewFrame = previewFrame
self.safeInsets = safeInsets
self.isPreviewing = isPreviewing
self.isMuted = isMuted
self.totalDuration = totalDuration
@@ -169,6 +172,9 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
if lhs.previewFrame != rhs.previewFrame {
return false
}
if lhs.safeInsets != rhs.safeInsets {
return false
}
if lhs.cameraState != rhs.cameraState {
return false
}
@@ -529,6 +535,11 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
let state = context.state
let availableSize = context.component.containerSize
var sideInset: CGFloat = 8.0
if component.safeInsets.bottom <= 32.0 {
sideInset += 18.0
}
state.cameraState = component.cameraState
var viewOnceOffset: CGFloat = 102.0
@@ -619,12 +630,12 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
)
context.add(flipButtonBackground
.position(CGPoint(x: flipButton.size.width / 2.0 + 8.0, y: availableSize.height - flipButton.size.height / 2.0 - 8.0))
.position(CGPoint(x: flipButton.size.width / 2.0 + sideInset, y: availableSize.height - flipButton.size.height / 2.0 - 8.0))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
context.add(flipButton
.position(CGPoint(x: flipButton.size.width / 2.0 + 8.0, y: availableSize.height - flipButton.size.height / 2.0 - 8.0))
.position(CGPoint(x: flipButton.size.width / 2.0 + sideInset, y: availableSize.height - flipButton.size.height / 2.0 - 8.0))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
@@ -698,13 +709,13 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
)
context.add(flashButtonBackground
.position(CGPoint(x: flipButton.size.width + 8.0 + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0))
.position(CGPoint(x: flipButton.size.width + sideInset + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
context.add(flashButton
.position(CGPoint(x: flipButton.size.width + 8.0 + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0))
.position(CGPoint(x: flipButton.size.width + sideInset + flashButton.size.width / 2.0 + 11.0, y: availableSize.height - flashButton.size.height / 2.0 - 8.0))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
@@ -751,7 +762,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
transition: context.transition
)
context.add(viewOnceButton
.position(CGPoint(x: availableSize.width - viewOnceButton.size.width / 2.0 - 8.0, y: availableSize.height - viewOnceButton.size.height / 2.0 - 8.0 - viewOnceOffset))
.position(CGPoint(x: availableSize.width - viewOnceButton.size.width / 2.0 - sideInset, y: availableSize.height - viewOnceButton.size.height / 2.0 - 8.0 - viewOnceOffset))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
@@ -791,7 +802,7 @@ private final class VideoMessageCameraScreenComponent: CombinedComponent {
transition: context.transition
)
context.add(recordMoreButton
.position(CGPoint(x: availableSize.width - recordMoreButton.size.width / 2.0 - 8.0, y: availableSize.height - recordMoreButton.size.height / 2.0 - 22.0))
.position(CGPoint(x: availableSize.width - recordMoreButton.size.width / 2.0 - sideInset, y: availableSize.height - recordMoreButton.size.height / 2.0 - 22.0))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
@@ -1546,6 +1557,7 @@ public class VideoMessageCameraScreen: ViewController {
cameraState: self.cameraState,
containerSize: backgroundFrame.size,
previewFrame: previewFrame,
safeInsets: layout.safeInsets,
isPreviewing: self.previewState != nil || self.transitioningToPreview,
isMuted: self.previewState?.isMuted ?? true,
totalDuration: self.previewState?.composition.duration.seconds ?? 0.0,