gpt4 book ai didi

ios - 我想暂停数组中的图像

转载 作者:行者123 更新时间:2023-12-01 18:59:55 25 4
gpt4 key购买 nike

我正在使用以下代码创建动画:

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 秒,然后再次恢复。是否可以?

最佳答案

UIImageView 不能使用变速。像这样的动画。

不过,有几种方法可以解决它。

1. 自己做。

为此,您可以使用 NSTimer 之类的东西。并让它反复触发一种方法来为您更改图像。使用它,您可以单独为每个图像计时(您甚至可以创建一个数据对象来保存图像和显示它的时间长度,然后创建这些图像的数组。

2. 操作当前方法。

如果您有 20 张图像,并且您想在 7 秒内全部显示出来,那么这就是……每张图像 0.35 秒。所以 5 秒的停顿大约是 14 张图像的值(value)。

因此,您可以添加 1-9 一次,然后添加 10 十四次,而不是将每个图像添加一次。 11-19 一次,然后 20 十四次。

然后它会像它正在做的那样交换,但是当它达到 10 时,它会将它交换为同一图像的另一个副本,因此它看起来像是在暂停。

然后,您必须将持续时间...增加到 17 秒,以获得每个图像的相似持续时间。

我会做什么?

虽然这听起来像一个黑客(因为它是)我想我会先尝试第二种方法。开始工作要容易得多,所以如果它确实失败了,你不需要花很长时间来设置它。

第一种方法需要更多的设置工作,但可以更好地控制动画。

方法 1 的快速而肮脏的示例

创建一个类似...的对象

MyTimedImage
------------
UIImage *image
CGFloat duration

那么例如...
// 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];
}

使用您公开的属性,您可以通过按下按钮(例如)暂停当前图像上的 ImageView 。

要启动该过程,只需运行 [self displayNextImage];您也可以从图像循环中的任何位置开始。

关于ios - 我想暂停数组中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23512269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com