我到处搜索,但我找不到适合我问题的解决办法。我在启动时播放了一个图像序列。在此序列之后,我想触发一个函数。一个激活Image的函数。因此,动画将流畅地运行到图像中而不会中断。我在互联网上找到了很多解决方案,例如使用计时器执行它但通过模拟器运行代码它可以工作,在设备上它没有并且被延迟:(。这是通过测试动画完成时设置计时器的好方法吗?方法“animationDone”是总是在错误的时间触发!
这是我的示例代码:
- (void)viewDidLoad {
imageView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"Rad_start_00000.png"],
[UIImage imageNamed:@"Rad_start_00001.png"],
[UIImage imageNamed:@"Rad_start_00002.png"],
[UIImage imageNamed:@"Rad_start_00003.png"],
[UIImage imageNamed:@"Rad_start_00004.png"],
[UIImage imageNamed:@"Rad_start_00005.png"],
[UIImage imageNamed:@"Rad_start_00006.png"],
[UIImage imageNamed:@"Rad_start_00007.png"],
[UIImage imageNamed:@"Rad_start_00008.png"],
[UIImage imageNamed:@"Rad_start_00009.png"],
[UIImage imageNamed:@"Rad_start_00010.png"],
[UIImage imageNamed:@"Rad_start_00011.png"],
[UIImage imageNamed:@"Rad_start_00012.png"],
[UIImage imageNamed:@"Rad_start_00013.png"],
[UIImage imageNamed:@"Rad_start_00014.png"],
[UIImage imageNamed:@"Rad_start_00015.png"],
[UIImage imageNamed:@"Rad_start_00016.png"],
[UIImage imageNamed:@"Rad_start_00017.png"],nil];
[imageView setAnimationDuration:0.7];
[imageView setAnimationRepeatCount:1];
[imageView startAnimating];
[self performSelector:@selector(animationDone) withObject:nil afterDelay:1.2];
}
答案 0 :(得分:1)
首先,您应尝试对afterDelay
参数performSelector
和setAnimationDuration
使用相同的时间间隔(例如,两者均为0.7秒)。
如果它没有完全按照您的意愿行事,您可以通过编程方式调用计时器,不断检查动画是否完成。例如,您可以设置显示链接(它类似于计时器,但链接到显示器的更新),然后选中imageView.isAnimating
,例如:
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic, strong) CADisplayLink *displayLink;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.imageView.animationImages = @[[UIImage imageNamed:@"Rad_start_00000.png"],
[UIImage imageNamed:@"Rad_start_00001.png"],
[UIImage imageNamed:@"Rad_start_00002.png"],
[UIImage imageNamed:@"Rad_start_00003.png"],
[UIImage imageNamed:@"Rad_start_00004.png"],
[UIImage imageNamed:@"Rad_start_00005.png"],
[UIImage imageNamed:@"Rad_start_00006.png"],
[UIImage imageNamed:@"Rad_start_00007.png"],
[UIImage imageNamed:@"Rad_start_00008.png"],
[UIImage imageNamed:@"Rad_start_00009.png"],
[UIImage imageNamed:@"Rad_start_00010.png"],
[UIImage imageNamed:@"Rad_start_00011.png"],
[UIImage imageNamed:@"Rad_start_00012.png"],
[UIImage imageNamed:@"Rad_start_00013.png"],
[UIImage imageNamed:@"Rad_start_00014.png"],
[UIImage imageNamed:@"Rad_start_00015.png"],
[UIImage imageNamed:@"Rad_start_00016.png"],
[UIImage imageNamed:@"Rad_start_00017.png"]];
[self.imageView setAnimationDuration:0.7];
[self.imageView setAnimationRepeatCount:1];
[self.imageView startAnimating];
[self startDisplayLink];
}
- (void)startDisplayLink
{
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink:)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}
- (void)stopDisplayLink
{
[self.displayLink invalidate];
self.displayLink = nil;
}
- (void)handleDisplayLink:(CADisplayLink *)displayLink
{
if (!self.imageView.isAnimating) {
[self stopDisplayLink];
NSLog(@"done");
// do whatever else you want here
}
}
@end
答案 1 :(得分:0)
尝试使用动画的委托 和setAnimationDidStopSelector: