UIInterpolatingMotionEffect 视差效果 Swift 2 iOS

UIInterpolatingMotionEffect Parallax Effect Swift 2 iOS

我正在尝试创建视差效果,例如 iPhone 主屏幕,其中背景随着您倾斜 phone 而移动。到目前为止我已经实现了这一点,但我仍然有一个问题。在我倾斜 phone 并且背景移动后,它会非常缓慢地移回居中位置。

这不是约束。我去掉了中心 x/y 约束,它仍然缓慢地向后滑动,好像它正在重新校准到新位置。唯一的其他约束是比率。所以这不是约束。

有什么想法吗?

代码很简单:

let leftRightMin = CGFloat(-50.0)
let leftRightMax = CGFloat(50.0)
let upDownMin = CGFloat(-35.0)
let upDownMax = CGFloat(35.0)

let leftRight = UIInterpolatingMotionEffect(keyPath: "center.x", type: 
                                   UIInterpolatingMotionEffectType.TiltAlongHorizontalAxis)
leftRight.minimumRelativeValue = leftRightMin
leftRight.maximumRelativeValue = leftRightMax

let upDown = UIInterpolatingMotionEffect(keyPath: "center.y", type:      
                                     UIInterpolatingMotionEffectType.TiltAlongVerticalAxis)
upDown.minimumRelativeValue = upDownMin
upDown.maximumRelativeValue = upDownMax

let fxGroup = UIMotionEffectGroup()
fxGroup.motionEffects = [leftRight, upDown]

backgroundImage.addMotionEffect(fxGroup)

为什么图像在倾斜后会缓慢地向后居中以及如何修复它有什么想法吗?

这是 UIInterpolatingMotionEffect 的行为。您会注意到它也发生在主屏幕上,以及系统中使用该效果的其他任何地方。

之所以这样做,是因为有时用户会移动他们的设备,使内容插入到最大位置,但不会 return 到中心或静止位置。这意味着曾经是最大插值位置的位置现在是静止中心,因此内容必须移回其原始位置,以防设备再次移动并且效果可以继续。

我在 UIInterpolatingMotionEffect documentation 中没有发现任何关于此行为的提及,但在系统使用该效果的任何地方都可以观察到。