UIView使用UIMotionEffect效果

简介:

UIView使用UIMotionEffect效果

 

这个效果在模拟器上看不了,所以无法截图.

UIView+MotionEffect.h  +  UIView+MotionEffect.m

//
//  UIView+MotionEffect.h
//
//  Copyright (c) 2014年 Nick Jensen. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (MotionEffect)

@property (nonatomic, strong) UIMotionEffectGroup  *effectGroup;

- (void)addXAxisWithValue:(CGFloat)xValue YAxisWithValue:(CGFloat)yValue;
- (void)removeSelfMotionEffect;

@end


//
//  UIView+MotionEffect.m
//
//  Copyright (c) 2014年 Nick Jensen. All rights reserved.
//

#import "UIView+MotionEffect.h"
#import <objc/runtime.h>

static char motionEffectFlag;

@implementation UIView (MotionEffect)

-(void)setEffectGroup:(UIMotionEffectGroup *)effectGroup
{
    // 清除掉关联
    objc_setAssociatedObject(self, &motionEffectFlag,
                             nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    // 建立关联
    objc_setAssociatedObject(self, &motionEffectFlag,
                             effectGroup, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(UIMotionEffectGroup *)effectGroup
{
    // 返回关联
    return objc_getAssociatedObject(self, &motionEffectFlag);
}

- (void)addXAxisWithValue:(CGFloat)xValue YAxisWithValue:(CGFloat)yValue
{
    NSLog(@"%p", &motionEffectFlag);
    
    if ((xValue >= 0) && (yValue >= 0))
    {
        UIInterpolatingMotionEffect *xAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
        xAxis.minimumRelativeValue = @(-xValue);
        xAxis.maximumRelativeValue = @(xValue);
        
        UIInterpolatingMotionEffect *yAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
        yAxis.minimumRelativeValue = @(-yValue);
        yAxis.maximumRelativeValue = @(yValue);
        
        // 先移除效果再添加效果
        self.effectGroup.motionEffects = nil;
        [self removeMotionEffect:self.effectGroup];
        self.effectGroup.motionEffects = @[xAxis, yAxis];
        
        // 给view添加效果
        [self addMotionEffect:self.effectGroup];
    }
}

- (void)removeSelfMotionEffect
{
    [self removeMotionEffect:self.effectGroup];
}

@end

使用:
- (void)viewDidLoad {
    
    [super viewDidLoad];

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"show"]];
    [self.view addSubview:imageView];
    imageView.center = self.view.center;

    imageView.effectGroup = [UIMotionEffectGroup new];
    [imageView addXAxisWithValue:5.f YAxisWithValue:5.f];
}

 

注意:

给类目添加属性需要重写setter.getter方法哦:)

 

目录
相关文章
|
Swift
Swift - UIView,UILabel,UIButton,UIImageView
Swift - UIView,UILabel,UIButton,UIImageView
67 0
UIViewController/ApplicationSequ…
UIViewController   ApplicationSequence UI-03 注意: NSLog(@"%s %d",__FUNCTION__,__LINE__); //打印程序方法的执行过程,    //__FUNCTION__,执行的方法名;__LINE__ 显示的NSlL...
721 0
|
开发者
UIViewController
UIViewController在UIKit中主要功能是用于控制画面的切换,其中的view属性(UIView类型)管理整个画面的外观.大部分控制器类都会继承UIKit的UIViewController基类,该基类中包含了大量方法,可以重写这些方法来处理视图的加载、视图显示等各种事件。
722 0