2013年2月24日 星期日

iOS-gestureRecognized

之前修課的時候一直沒有去看手勢辨識的部分,心血來潮簡單看一下手勢辨識的方法
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

沒有留言:

張貼留言