#import"ViewController.h"
@interfaceViewController()
@property(nonatomic,strong)CALayer*imageLayer;
@property(nonatomic,strong)dispatch_source_ttimer;
@property(nonatomic,strong)UIImageView*backImage;
@end
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
UIImageView*backImage = [[UIImageViewalloc]initWithFrame:CGRectMake(100,100,200,300)];
_backImage= backImage;
[self.viewaddSubview:backImage];
UIImage*image1 = [UIImageimageNamed:@"1"];
//創(chuàng)建出圖片layer埠戳;
self.imageLayer= [CALayerlayer];
self.imageLayer.frame=CGRectMake(100,100,200,300);
[self.view.layeraddSublayer:self.imageLayer];
self.imageLayer.contents= (__bridgeid)(image1.CGImage);
[selfperformSelector:@selector(changeImages)withObject:nilafterDelay:1.0f];
}
-(void)changeImages {
__blockNSString*str =@"2";
self.backImage.image= [UIImageimageNamed:str];
//定時器開始執(zhí)行的延時時間
NSTimeIntervaldelayTime =0.0f;
//定時器間隔時間
NSTimeIntervaltimeInterval =2.0f;
//創(chuàng)建子線程隊列
dispatch_queue_tqueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//使用之前創(chuàng)建的隊列來創(chuàng)建計時器
_timer=dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0, queue);
//設置延時執(zhí)行時間妒牙,delayTime為要延時的秒數(shù)
dispatch_time_tstartDelayTime =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime *NSEC_PER_SEC));
//設置計時器
dispatch_source_set_timer(_timer, startDelayTime, timeInterval *NSEC_PER_SEC,0.1*NSEC_PER_SEC);
dispatch_source_set_event_handler(_timer, ^{
//執(zhí)行事件
if( [strisEqualToString:@"1"]) {
str =@"2";
}else{
str =@"1";
}
dispatch_async(dispatch_get_main_queue(), ^{
//圖片動畫;
CABasicAnimation*contentsAnimation = [CABasicAnimationanimationWithKeyPath:@"contents"];
contentsAnimation.fromValue=self.imageLayer.contents;
contentsAnimation.toValue= (__bridgeid)(self.backImage.image.CGImage);
contentsAnimation.duration=1;
//設定layer動畫結束之后的值倡勇,(必須設定,否則會恢復到動畫之前的狀態(tài))
self.imageLayer.contents= (__bridgeid)(self.backImage.image.CGImage);
//提交動畫著角;
[self.imageLayeraddAnimation:contentsAnimationforKey:nil];
[self.backImagesetImage:[UIImageimageNamed:str]];
}) ;
});
//啟動計時器
dispatch_resume(_timer);
}