1、UIMotionEffect简介
在iOS7.0推出了UIMotionEffect运动视觉效果,就是从屏幕偏移不同角度、看到的效果不同!
NS_CLASS_AVAILABLE_IOS(7_0) @interface UIMotionEffect : NSObject <NSCopying, NSCoding> - (instancetype)init NS_DESIGNATED_INITIALIZER; - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; //观察者的角度偏移viewerOffset,获取运动视觉效果的各项属性和值 - (nullable NSDictionary<NSString *, id> *)keyPathsAndRelativeValuesForViewerOffset:(UIOffset)viewerOffset; @end typedef NS_ENUM(NSInteger, UIInterpolatingMotionEffectType) { UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis,//X轴 UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis//Y轴 }; @interface UIInterpolatingMotionEffect : UIMotionEffect - (instancetype)initWithKeyPath:(NSString *)keyPath type:(UIInterpolatingMotionEffectType)type NS_DESIGNATED_INITIALIZER;//初始化 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; @property (readonly, nonatomic) NSString *keyPath;//获取角度偏移 @property (readonly, nonatomic) UIInterpolatingMotionEffectType type;//获取类型 @property (nullable, strong, nonatomic) id minimumRelativeValue;//最小角度偏移 @property (nullable, strong, nonatomic) id maximumRelativeValue;//最大角度偏移 @end @interface UIMotionEffectGroup : UIMotionEffect @property (nullable, copy, nonatomic) NSArray<__kindof UIMotionEffect *> *motionEffects;//添加水平和垂直效果添加到对应UI上 @end
2、简单使用
- (void)addEffectWithOffset:(NSInteger)offset withView:(UIView *)view{ UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; effectX.minimumRelativeValue = @(-offset); effectX.maximumRelativeValue = @(offset); UIInterpolatingMotionEffect *effectY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; effectY.minimumRelativeValue = @(-offset/2); effectY.maximumRelativeValue = @(offset/2); // UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init]; // group.motionEffects = @[effectX,effectY]; view.motionEffects = @[effectX,effectY]; }