免费开源的iOS开发学习平台

UIGestureRecognizer手势 : 4-滑动手势

滑动手势简介

滑动手势(UISwipeGestureRecognizer)常用于照片管理类App,能够实现照片的滑动显示。滑动手指支持向上、向下、向左、向右四个方面的滑动,在创建滑动手势对象时,需要通过direction属性来指定滑动的方向,默认的滑动方向为向右滑动。

@property(nonatomic) UISwipeGestureRecognizerDirection direction; 

其中,UISwipeGestureRecognizerDirection的取值包括:

  • UISwipeGestureRecognizerDirectionRight:向右,默认;
  • UISwipeGestureRecognizerDirectionLeft:向左;
  • UISwipeGestureRecognizerDirectionUp:向上;
  • UISwipeGestureRecognizerDirectionDown:向下。

示例代码

下方的示例代码实现了图片的滑动切换功能,首先创建一个UIImageView对象,在这个对象上添加两个滑动手势,分别对应向左滑动以及向右滑动,滑动后可以切换图片的展示。

  • 创建一个Single View Application,并添加4张图片到工程中,图片名称命名为0.png,1.png,2.png,3.png;

  • 在控制器类中,添加一个可变数组对象属性以及一个索引,用于存放图片对象并且记录当前展示第几张图片;

@property(nonatomic,strong) NSMutableArray *imageList;
@property (nonatomic,assign) NSInteger imageIndex;
  • 把图片对象存入可变数组中。
-(NSMutableArray *)imageList{
    if (_imageList == nil) {
        _imageList = [NSMutableArray array];
        for (int i = 0; i < 4; i++) {
            NSString *imageName = [NSString stringWithFormat:@"%d", i];
            UIImage *image = [UIImage imageNamed:imageName];
            [_imageList addObject:image];
        }        
    }
    return _imageList;
}
  • 在viewDidLoad方法中,创建UIImageView对象并且初始化滑动手势对象,分别创建一个向左滑动的对象以及一个向右滑动的对象,最后初始化imageIndex的值;
- (void)viewDidLoad {
    [super viewDidLoad];
    //创建UIView对象
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 250, 150, 150)];
    imageView.image = self.imageList[0];
    imageView.userInteractionEnabled = YES;
    [self.view addSubview:imageView];
    //滑动手势
    UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
    UISwipeGestureRecognizer *swipLeftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
    swipLeftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
    [imageView addGestureRecognizer:swipeRightGesture];
    [imageView addGestureRecognizer:swipLeftGesture];
    //初始化imageIndex
    self.imageIndex = 0;
}
  • 添加swipe:方法,实现图片滑动功能,在该方法中,根据gesture参数中的direction的值来区分是向左滑动还是向右滑动。
-(void) swipe: (UISwipeGestureRecognizer *) gesture {
    NSLog(@"%s",__func__);
    int totalCount = self.imageList.count;   
    if (gesture.direction == UISwipeGestureRecognizerDirectionLeft) {
        if (self.imageIndex >= totalCount -1) return;
        self.imageView.image = self.imageList[++self.imageIndex];
    }else if (gesture.direction == UISwipeGestureRecognizerDirectionRight) {
        if (self.imageIndex <= 0) return;
        self.imageView.image = self.imageList[--self.imageIndex];
    }
}

示例代码

https://github.com/99ios/8.4.4