国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

8.3 過(guò)渡

2018-02-24 15:07 更新

過(guò)渡

有時(shí)候?qū)τ趇OS應(yīng)用程序來(lái)說(shuō),希望能通過(guò)屬性動(dòng)畫來(lái)對(duì)比較難做動(dòng)畫的布局進(jìn)行一些改變。比如交換一段文本和圖片,或者用一段網(wǎng)格視圖來(lái)替換,等等。屬性動(dòng)畫只對(duì)圖層的可動(dòng)畫屬性起作用,所以如果要改變一個(gè)不能動(dòng)畫的屬性(比如圖片),或者從層級(jí)關(guān)系中添加或者移除圖層,屬性動(dòng)畫將不起作用。

于是就有了過(guò)渡的概念。過(guò)渡并不像屬性動(dòng)畫那樣平滑地在兩個(gè)值之間做動(dòng)畫,而是影響到整個(gè)圖層的變化。過(guò)渡動(dòng)畫首先展示之前的圖層外觀,然后通過(guò)一個(gè)交換過(guò)渡到新的外觀。

為了創(chuàng)建一個(gè)過(guò)渡動(dòng)畫,我們將使用CATransition,同樣是另一個(gè)CAAnimation的子類,和別的子類不同,CATransition有一個(gè)typesubtype來(lái)標(biāo)識(shí)變換效果。type屬性是一個(gè)NSString類型,可以被設(shè)置成如下類型:

kCATransitionFade 
kCATransitionMoveIn 
kCATransitionPush 
kCATransitionReveal

到目前為止你只能使用上述四種類型,但你可以通過(guò)一些別的方法來(lái)自定義過(guò)渡效果,后續(xù)會(huì)詳細(xì)介紹。

默認(rèn)的過(guò)渡類型是kCATransitionFade,當(dāng)你在改變圖層屬性之后,就創(chuàng)建了一個(gè)平滑的淡入淡出效果。

我們?cè)诘谄哒碌睦又芯鸵呀?jīng)用到過(guò)kCATransitionPush,它創(chuàng)建了一個(gè)新的圖層,從邊緣的一側(cè)滑動(dòng)進(jìn)來(lái),把舊圖層從另一側(cè)推出去的效果。

kCATransitionMoveInkCATransitionRevealkCATransitionPush類似,都實(shí)現(xiàn)了一個(gè)定向滑動(dòng)的動(dòng)畫,但是有一些細(xì)微的不同,kCATransitionMoveIn從頂部滑動(dòng)進(jìn)入,但不像推送動(dòng)畫那樣把老土層推走,然而kCATransitionReveal把原始的圖層滑動(dòng)出去來(lái)顯示新的外觀,而不是把新的圖層滑動(dòng)進(jìn)入。

后面三種過(guò)渡類型都有一個(gè)默認(rèn)的動(dòng)畫方向,它們都從左側(cè)滑入,但是你可以通過(guò)subtype來(lái)控制它們的方向,提供了如下四種類型:

kCATransitionFromRight 
kCATransitionFromLeft 
kCATransitionFromTop 
kCATransitionFromBottom

一個(gè)簡(jiǎn)單的用CATransition來(lái)對(duì)非動(dòng)畫屬性做動(dòng)畫的例子如清單8.11所示,這里我們對(duì)UIImageimage屬性做修改,但是隱式動(dòng)畫或者CAPropertyAnimation都不能對(duì)它做動(dòng)畫,因?yàn)镃ore Animation不知道如何在插圖圖片。通過(guò)對(duì)圖層應(yīng)用一個(gè)淡入淡出的過(guò)渡,我們可以忽略它的內(nèi)容來(lái)做平滑動(dòng)畫(圖8.4),我們來(lái)嘗試修改過(guò)渡的type常量來(lái)觀察其它效果。

清單8.11 使用CATransition來(lái)對(duì)UIImageView做動(dòng)畫

@interface ViewController ()

@property (nonatomic, weak) IBOutlet UIImageView *imageView;
@property (nonatomic, copy) NSArray *images;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //set up images
    self.images = @[[UIImage imageNamed:@"Anchor.png"],
                    [UIImage imageNamed:@"Cone.png"],
                    [UIImage imageNamed:@"Igloo.png"],
                    [UIImage imageNamed:@"Spaceship.png"]];
}

- (IBAction)switchImage
{
    //set up crossfade transition
    CATransition *transition = [CATransition animation];
    transition.type = kCATransitionFade;
    //apply transition to imageview backing layer
    [self.imageView.layer addAnimation:transition forKey:nil];
    //cycle to next image
    UIImage *currentImage = self.imageView.image;
    NSUInteger index = [self.images indexOfObject:currentImage];
    index = (index + 1) % [self.images count];
    self.imageView.image = self.images[index];
}

@end

你可以從代碼中看出,過(guò)渡動(dòng)畫和之前的屬性動(dòng)畫或者動(dòng)畫組添加到圖層上的方式一致,都是通過(guò)-addAnimation:forKey:方法。但是和屬性動(dòng)畫不同的是,對(duì)指定的圖層一次只能使用一次CATransition,因此,無(wú)論你對(duì)動(dòng)畫的鍵設(shè)置什么值,過(guò)渡動(dòng)畫都會(huì)對(duì)它的鍵設(shè)置成“transition”,也就是常量kCATransition

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)