轉場動畫就是從一個場景以動畫的形式過渡到另一個場景
步驟:
1.創建轉場動
2.設置轉場類型、子類型(可選)及其他屬性畫
3.設置轉場后的新視圖并添加動畫到圖層
常用的轉場類型(注意私有API是蘋果官方沒有公開的動畫類型,但是目前通過仍然可以使用):
//添加手勢
UISwipeGestureRecognizer?*leftSwipeGesture=[[UISwipeGestureRecognizer?alloc]initWithTarget:self?action:@selector(leftSwipe:)];
leftSwipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;
[self.view?addGestureRecognizer:leftSwipeGesture];
UISwipeGestureRecognizer?*rightSwipeGesture=[[UISwipeGestureRecognizer?alloc]initWithTarget:self?action:@selector(rightSwipe:)];
rightSwipeGesture.direction=UISwipeGestureRecognizerDirectionRight;
[self.view?addGestureRecognizer:rightSwipeGesture];
UISwipeGestureRecognizer?*topSwipeGesture=[[UISwipeGestureRecognizer?alloc]initWithTarget:self?action:@selector(topSwipe:)];
topSwipeGesture.direction=UISwipeGestureRecognizerDirectionUp;
[self.view?addGestureRecognizer:topSwipeGesture];
UISwipeGestureRecognizer?*bottomSwipeGesture=[[UISwipeGestureRecognizer?alloc]initWithTarget:self?action:@selector(bottomSwipe:)];
bottomSwipeGesture.direction=UISwipeGestureRecognizerDirectionDown;
[self.view?addGestureRecognizer:bottomSwipeGesture];
#pragmamark?向左滑動瀏覽下一張圖片
-(void)leftSwipe:(UISwipeGestureRecognizer?*)gesture{
[self?transitionAnimation:1];
}
#pragmamark?向右滑動瀏覽上一張圖片
-(void)rightSwipe:(UISwipeGestureRecognizer?*)gesture{
[self?transitionAnimation:2];
}
-(void)topSwipe:(UISwipeGestureRecognizer?*)gesture{
[self?transitionAnimation:3];
}
-(void)bottomSwipe:(UISwipeGestureRecognizer?*)gesture{
[self?transitionAnimation:4];
}
#pragmamark?轉場動畫
-(void)transitionAnimation:(NSInteger)direction{
//1.創建轉場動畫對象
CATransition?*transition=[[CATransition?alloc]init];
//2.設置動畫類型,注意對于蘋果官方沒公開的動畫類型只能使用字符串,并沒有對應的常量定義
transition.type=@"rippleEffect";
BOOL?bl?=?YES;
//設置子類型
if(direction?==1)?{
transition.subtype=kCATransitionFromRight;
bl?=?YES;
}elseif(direction?==2)?{
transition.subtype=kCATransitionFromLeft;
bl?=?NO;
}elseif(direction?==3)?{
transition.subtype=kCATransitionFromTop;
bl?=?YES;
}else{
transition.subtype=kCATransitionFromBottom;
bl?=?NO;
}
//設置動畫時常
transition.duration=1.0f;
//3.設置轉場后的新視圖添加轉場動畫
if(bl)?{
currentIndex=(currentIndex+1)%IMAGE_COUNT;
}else{
currentIndex=(currentIndex-1+IMAGE_COUNT)%IMAGE_COUNT;
}
NSString?*imageName=[NSString?stringWithFormat:@"%d",(int)currentIndex];
_imageView.image?=?[UIImage?imageNamed:imageName];
[_imageView.layer?addAnimation:transition?forKey:@"KCTransitionAnimation1"];
}
或者用UIView動畫來實現轉場:
#pragmamark?轉場動畫
-(void)transitionAnimation:(BOOL)isNext{
UIViewAnimationOptions?option;
if(isNext)?{
option=UIViewAnimationOptionCurveLinear|UIViewAnimationOptionTransitionFlipFromRight;
}else{
option=UIViewAnimationOptionCurveLinear|UIViewAnimationOptionTransitionFlipFromLeft;
}
[UIView?transitionWithView:_imageView?duration:1.0options:option?animations:^{
_imageView.image=[self?getImage:isNext];
}?completion:nil];
}
結果: