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







沒有留言:
張貼留言