之前修課的時候一直沒有去看手勢辨識的部分,心血來潮簡單看一下手勢辨識的方法
1. 首先把: a. imgaeView b. Page control c. Pan Gesture Recognizer 加入到viewController 2. 記得勾選View的Attributes inspector中的User interaction Enabled,不然會無法辨識手勢(練習的時候忘記,還以為是code打錯QQ) 注意:Page controller設定頁數在Attributes inspector
3. CRViewController.h:
#import <UIKit/UIKit.h> @interface GRViewController : UIViewController @property (strong, nonatomic) IBOutlet UIImageView *imageView; @property (strong, nonatomic) IBOutlet UIPageControl *pageController; - (IBAction)pageChange:(UIPageControl*)sender; - (IBAction)gestureRecognized:(UIPanGestureRecognizer *)sender; @end
注意在
- (IBAction)pageChange:(UIPageControl*)sender; - (IBAction)gestureRecognized:(UIPanGestureRecognizer *)sender;
sender前面的資料形態不要用id,不然按ESC不會跳出可用的method
4. CRViewController.m: 下面的code是page controller轉換頁面的code(PS.我的image存的檔名為IMG_X.PNG)
- (void) turnPage{ //currentPage代表目前的頁面,頁面index從0開始 NSString *str = [[NSString alloc]initWithFormat:@"IMG_%d.PNG",pageController.currentPage+1]; imageView.image = [UIImage imageNamed:str]; }
下面的code是辨別手勢後會做頁面的轉換
- (IBAction)gestureRecognized:(UIPanGestureRecognizer *)sender { //這行的目的在防止手指動作未結束前,不可換頁(ex:再翻動相簿時,手指未離開螢幕表示手指動作的state尚未結束) if(sender.state != UIGestureRecognizerStateEnded){ return; } //velocityInView把手指移動的速度做換算的動作,把速度分解成x的velocity和y的velocity CGPoint point = [sender velocityInView:self.view]; NSLog(@"%f,%f",point.x,point.y); if(point.x>0){ //手指向右滑動 if(pageController.currentPage>0){ pageController.currentPage--; [UIView transitionWithView:imageView duration:0.5 options:UIViewAnimationOptionTransitionCurlUp animations:^(void){ [self turnPage]; } completion:nil]; } } else{ //手指向左滑動 if(pageController.currentPage<pageController.numberOfPages){ pageController.currentPage++; [UIView transitionWithView:imageView duration:0.5 options:UIViewAnimationOptionTransitionCurlUp animations:^(void){ [self turnPage]; } completion:nil]; } } }
有個不錯的教學網站 裡面有描述參數的用途 最後放上我的code 可以直接使用git clone下載下來 myCode
沒有留言:
張貼留言