UIInterpolatingMotionEffect视差效果Swift 2 iOS

时间:2015-11-19 23:10:15

标签: ios xcode swift parallax uimotioneffect

我正在尝试创建一个视差效果,例如iPhone主屏幕,当您倾斜手机时背景会移动。到目前为止我已经实现了这个目标,但我还有一个问题。在我倾斜手机并且背景移动之后,它会非常缓慢地移回到居中的位置。

不是限制因素。我删除了中心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)

有什么想法为什么它会在倾斜之后慢慢将图像重新集中并如何修复它?

1 个答案:

答案 0 :(得分:2)

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

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

我在UIInterpolatingMotionEffect documentation中没有发现这种行为,但在系统使用效果的任何地方都可以观察到。