我正在使用以下代码创建动画:
NSMutableArray *dashBoy = [NSMutableArray array];
for (int i = 1; i<= 20; i++) {
butterfly = [NSString stringWithFormat:@"5c_%d.jpg", i];
if ((image = [UIImage imageNamed:butterfly]))
[dashBoy addObject:image];
}
[stgImageView setAnimationImages:dashBoy];
[stgImageView setAnimationDuration:7.0f];
[stgImageView setAnimationRepeatCount:-1];
[stgImageView startAnimating];
我的要求是如果dashBoy 5c_10.jpg ,然后暂停图像约5秒然后恢复动画,另一个如果dashBoy 5c_20.jpg ,然后暂停图像再次持续约5秒钟并再次恢复。有可能吗?
答案 0 :(得分:2)
你不能像UIImageView
这样的NSTimer
动画使用变速。
虽然有几种方法。
<强> 1。自己动手。
为此,您将使用类似MyTimedImage
------------
UIImage *image
CGFloat duration
的内容,并重复触发方法以更改图像。使用此功能,您可以单独为每个图像计时(您甚至可以创建一个包含图像的数据对象以及显示它的时间长度,然后创建和显示这些图像。
<强> 2。操纵当前的方法。
如果您有20张图片,而您希望在7秒内全部显示这些图像,那么...每张图片0.35秒。所以暂停5秒就是大约14张图片。
因此,您可以添加1-9一次,然后再添加10次,而不是添加每个图像。 11-19次,然后是20次。
然后它将像它正在进行交换,但是当它达到10时,它将交换为同一图像的另一个副本,因此看起来它会暂停。
然后,您必须将持续时间......增加到17秒,以便为每张图像获得相似的持续时间。
我该做什么?
虽然这听起来像是一个黑客(因为它),但我认为我先给出第二种方法。工作起来要容易得多,如果确实失败了,你就不会花很长时间来设置它。
第一种方法是设置更多工作,但可以更好地控制动画。
方法1的快速而肮脏的示例
创建类似......的对象
// probably want this as a property
NSMutableArray *timedImages = [NSMutableArray array];
MyTimedImage *timedImage = [MyTimedImage new];
timedImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"5c_%d.jpg", i]];
timedImage.duration = 0.4;
[timedImages addObject:timedImage];
所以......例如......
//set up properties something like this...
@property (nonatomic, assign) NSInteger currentIndex;
@property (nonatomic, assign) BOOL paused;
@property (nonatomic, assign) NSTimer *imageTimer;
- (void)displayNextImage
{
if (self.paused) {
return;
}
NSInteger nextIndex = self.currentIndex + 1;
if (nextIndex == [self.timedImages count]) {
nextIndex = 0;
}
MyTimedImage *nextImage = self.timedImages[nextIndex];
self.currentIndex = nextIndex;
self.imageView.image = nextImage.image;
self.imageTimer = [NSTimer scheduledTimerWithInterval:nextImage.duration target:self selector:@selector(displayNextImage) userInfo:nil repeats:NO];
}
然后你想要一种显示它们的方法......
[self displayNextImage];
使用您已曝光的属性,您可以通过按下按钮暂停当前图像上的图像视图(例如)。
要启动此过程,只需运行{{1}},您就可以在图像循环中的任何位置开始。
答案 1 :(得分:1)
使用UIImageView
动画,这是不可能的,您可能需要创建自己的动画逻辑,如加载阵列中的所有UIImages和通过计时器,切换到下一个动画帧,当您想要暂停时,使计时器无效