UINavigationBar或statusBarHeight->当CGAffineTransform应用于viewController.view时为0

问题描述 投票:0回答:1

我正在通过UIViewControllerAnimatedTransitioning编写交互式过渡。作为过渡的一部分,我将CGAffineTransform应用于from view controller

一旦应用了转换,fromViewController就会在顶部失去其safeAreaInset。这看起来很刺耳。

这里是过渡开始之前的图片。正常状态栏,导航栏和安全区域插图(顶部)。高约88点。Standard status bar and nav bar

这是过渡的第一帧。请注意,顶部间距现在更像是44点。enter image description here

fromVC在整个过渡过程中一直保持这种方式。我尝试了不同的方法来应用转换,但是它们的行为都相同。我也删除了圆角。

这里是转换:

var transform = CGAffineTransform.identity
            transform.concatenating(CGAffineTransform.identity.translatedBy(x: 0, y: yInset / 2))
            transform.concatenating(CGAffineTransform.identity.scaledBy(x: scaleX, y: scaleY))

fromVC.view.transform = transform
uiviewcontroller uikit cgaffinetransform safearealayoutguide uiviewpropertyanimator
1个回答
0
投票

我最终解决此问题的方法是使用CATransform3D而不是CGAffineTransform。使用此技术将填充保留在原位。

let scale = CATransform3DScale(CATransform3DIdentity, scaleX, scaleY, 1)
let translate = CATransform3DTranslate(scale, 0, yInset / 2, 0)
return CATransform3DConcat(scale, translate)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.