我希望能够实现与“真实移动背景”启动页面相同的行为。当您倾斜手机时,背景图像会稍微移动,使其看起来具有3D和“真实”的效果。
这就是我想在我的应用程序启动页面中实现的效果。
我该如何制作呢?
请查看UIInterpolatingMotionEffect
。
您可以为每个轴创建一个,创建一个组,并将运动效果组添加到背景中的UIImageView
。
let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.x", type: .TiltAlongHorizontalAxis)
horizontalMotionEffect.minimumRelativeValue = -50
horizontalMotionEffect.maximumRelativeValue = 50
let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y", type: .TiltAlongVerticalAxis)
verticalMotionEffect.minimumRelativeValue = -50
verticalMotionEffect.maximumRelativeValue = 50
let motionEffectGroup = UIMotionEffectGroup()
motionEffectGroup.motionEffects = [horizontalMotionEffect, verticalMotionEffect]
imageView.addMotionEffect(motionEffectGroup)
因此,当您围绕y轴倾斜时,图像将左右移动。当您围绕x轴倾斜时,图像将上下移动。
(图片来源于iOS事件处理指南)
Objective-C(如果有人在2020年仍然使用Obj-C)
// Vertical effect
UIInterpolatingMotionEffect *verticalMotionEffect =
[[UIInterpolatingMotionEffect alloc]
initWithKeyPath:@"center.y"
type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
verticalMotionEffect.minimumRelativeValue = @(-50);
verticalMotionEffect.maximumRelativeValue = @(50);
// horizontal effect
UIInterpolatingMotionEffect *horizontalMotionEffect =
[[UIInterpolatingMotionEffect alloc]
initWithKeyPath:@"center.x"
type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
horizontalMotionEffect.minimumRelativeValue = @(-50);
horizontalMotionEffect.maximumRelativeValue = @(50);
// Combine both effect
UIMotionEffectGroup *group = [UIMotionEffectGroup new];
group.motionEffects = @[horizontalMotionEffect, verticalMotionEffect];
// Add combine effects to your ImageView OR UIView
[yourImageView addMotionEffect:group];