现在的位置: 首页 > 综合 > 正文

UIGestureRecognizer小应用

2014年10月11日 ⁄ 综合 ⁄ 共 6575字 ⁄ 字号 评论关闭

1、轻拍手势:双指、单击,修改imageView的frame为(0,0,320,200)
2、长按手指:单指,修改imageView的alpha=0.5
3、实现平移、旋转、捏合
4、轻扫:竖向轻扫实现图:像随机切换显示;横向轻扫实现:图像消失,随机修改imageview的背景颜色

5、imageview每次只能添加一种手势识别器。


#define _originalRect CGRectMake(10, 50, 300, 450)
#define _originalImageName  @"h4.jpeg"

#import "HMTRootViewController.h"

@interface HMTRootViewController (){

    UITapGestureRecognizer       * _tapGesture;
    UILongPressGestureRecognizer * _longGesture;
    UIPanGestureRecognizer       * _panGesture;
    UIRotationGestureRecognizer  * _rotateGesture;
    UIPinchGestureRecognizer     * _pinchGesture;
    UISwipeGestureRecognizer     * _verticalSwipeGesture;
    UISwipeGestureRecognizer     * _horizontanlSwipeGesture;
    BOOL isTopDownOfRightLeft;    // 垂直滑动是YES,水平滑动是NO
    
}

@property (nonatomic,retain) UIButton * button;
@property (nonatomic,retain) UIImageView * imageView;

@end

@implementation HMTRootViewController

- (void)dealloc{
    
    RELEASE_SAFELY(_imageView);
    RELEASE_SAFELY(_button);
    [super dealloc];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        isTopDownOfRightLeft = YES;
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    
    [self createButtonView];
    [self createImageView];

}

#pragma mark - 设置图像
- (void)createImageView{
    
    self.imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:_originalImageName]];
    _imageView.frame = CGRectMake(10, 50, 300, 450);
    _imageView.userInteractionEnabled = YES;
    [self.view addSubview:_imageView];
    [_imageView release];
}



#pragma mark - 设置手势

#pragma mark  点击手势
- (void)createTapGestureRecognizer{
   

    _tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(TapGestureRecognizer:)];
    _tapGesture.numberOfTapsRequired = 1;
    _tapGesture.numberOfTouchesRequired = 2;
    [self.imageView addGestureRecognizer:_tapGesture];
    [_tapGesture release];

}

- (void)TapGestureRecognizer:(UITapGestureRecognizer *)tapGesture{

    self.imageView.frame = CGRectMake(0, 0, 320, 200);
    NSLog(@"%@",NSStringFromCGRect(self.imageView.frame));

}

#pragma mark  长按手势
- (void)createLongGestureRecognizer{
    
    _longGesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longGestureRecognizer:)];
    _longGesture.numberOfTouchesRequired = 1;
    _longGesture.minimumPressDuration = 1.0;
    [self.imageView addGestureRecognizer:_longGesture];
    [_longGesture release];
    
}

- (void)longGestureRecognizer:(UILongPressGestureRecognizer *)longGesture{

    self.imageView.alpha = 0.5;
    NSLog(@"%s",__FUNCTION__);

}

#pragma mark 平移拖拽手势
- (void)createPanGestureRecognizer{
    
    _panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureRecognizer:)];
    [self.imageView addGestureRecognizer:_panGesture];
    [_panGesture release];
    
}

- (void)panGestureRecognizer:(UIPanGestureRecognizer *)panGesture{
    
    NSLog(@"%s",__FUNCTION__);
 
    CGPoint txty = [panGesture translationInView:self.view];
    self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, txty.x, txty.y);
    
    [panGesture setTranslation:CGPointMake(0, 0) inView:self.view];
    
}

#pragma mark 旋转手势
- (void)createRotationGestureRecognizer{
    
    
    _rotateGesture = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGestureRecognizer:)];
    [self.imageView addGestureRecognizer:_rotateGesture];
    [_rotateGesture release];
    
}

- (void)rotationGestureRecognizer:(UIRotationGestureRecognizer *)rotateGesture{
    
    NSLog(@"%s",__FUNCTION__);
    self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotateGesture.rotation);
    rotateGesture.rotation = 0;
    
}

#pragma mark 捏合缩放手势
- (void)createPinchGestureRecognizer{
    
    _pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureRecognizer:)];
    [self.imageView addGestureRecognizer:_pinchGesture];
    [_pinchGesture release];
    
}

- (void)pinchGestureRecognizer:(UIPinchGestureRecognizer *)pinchGesture{
    
    NSLog(@"%s",__FUNCTION__);
    self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGesture.scale, pinchGesture.scale);
    pinchGesture.scale = 1;
    
}

#pragma mark - 轻扫手势
#pragma mark 上下 竖 垂直轻扫
- (void)createVerticalSwipeGestureRecognizer{
   
    _verticalSwipeGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGestureRecognizer:)];
    _verticalSwipeGesture.direction = UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;
    [self.imageView addGestureRecognizer:_verticalSwipeGesture];
    [_verticalSwipeGesture release];
}

#pragma mark 水平 左右轻扫
- (void)createHorizontanlSwipeGesture{
    
    _horizontanlSwipeGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGestureRecognizer:)];
    _horizontanlSwipeGesture.direction = UISwipeGestureRecognizerDirectionLeft |UISwipeGestureRecognizerDirectionRight;
    [self.imageView addGestureRecognizer:_horizontanlSwipeGesture];
    
}

- (void)swipeGestureRecognizer:(UISwipeGestureRecognizer *)swipeGesture{
    
    NSLog(@"%s",__FUNCTION__);
   
    if (swipeGesture.direction == (UISwipeGestureRecognizerDirectionUp|UISwipeGestureRecognizerDirectionDown)) {
        self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"h%i.jpeg",arc4random()%7+1]];
        ;

    }else if (swipeGesture.direction == (UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight)){
    
        self.imageView.image = nil;
        self.imageView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0];
    }
}


#pragma mark - 设置按钮
- (void)createButtonView{
    
    NSArray * buttonArray = @[@"轻点",@"长按",@"平移",@"旋转",@"捏合",@"轻扫"];
    
    for (int i = 0; i < [buttonArray count]; i++) {
        
        self.button = [UIButton buttonWithType:UIButtonTypeSystem];
        _button.frame = CGRectMake(10+50*i, 500, 50, 48);
        [_button setTitle:[buttonArray objectAtIndex:i] forState:UIControlStateNormal];
        [_button addTarget:self action:@selector(onClikButton:) forControlEvents:UIControlEventTouchUpInside];
        _button.tag = i;
        [self.view addSubview:_button];
    }
  
}

- (void)onClikButton:(UIButton *)button{
    
    [self resetImageView];
    switch (button.tag) {
        case 0:
  
            [self createTapGestureRecognizer];
            break;
        case 1:
 
            [self createLongGestureRecognizer];
            break;
        case 2:
        
            [self createPanGestureRecognizer];
            break;
        case 3:
           
            [self createRotationGestureRecognizer];
            break;
        case 4:
            
            [self createPinchGestureRecognizer];
            break;
        case 5:
            if (isTopDownOfRightLeft == YES) {
                [self createVerticalSwipeGestureRecognizer];
                isTopDownOfRightLeft = NO;
            } else {
                [self createHorizontanlSwipeGesture];
                isTopDownOfRightLeft = YES;
            }
            break;
        default:
            break;
    }
    
}

#pragma mark - 重置imageView
- (void)resetImageView
{
    for (int i = 0; i < [self.imageView.gestureRecognizers count]; i++) {
        [self.imageView removeGestureRecognizer:[self.imageView.gestureRecognizers objectAtIndex:i]];
    }
    self.imageView.alpha = 1.0;
    self.imageView.transform = CGAffineTransformIdentity;
    self.imageView.frame = _originalRect;
    self.imageView.image = [UIImage imageNamed:_originalImageName];
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

抱歉!评论已关闭.