gpt4 book ai didi

ios - 更改动画速度系列图像

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:10 26 4
gpt4 key购买 nike

我有一系列图片,我希望它们重复。但是,我希望上半场在 2 秒内播放,然后下半场在 5 秒内播放。

播放一系列图像非常容易,使用以下内容

   - (void) completeCycles:(int) cycles inhalePercentage:(int) inhalePercent exhalePercentage:(int) exhalePercent totalCycleTime:(int) time
{
NSMutableArray *textures = [NSMutableArray array];

for (int i = 0; i < kNumberBreathingImages; i++) {
NSString *textureName = [NSString stringWithFormat:@"breath%d.png", i];

for (int i = 0; i < inhalePercent; i++) {
[textures addObject:[UIImage imageNamed:textureName]];
}
}

for (int i = kNumberBreathingImages - 1; i > 0; i--) {
NSString *textureName = [NSString stringWithFormat:@"breath%d.png", i];
for (int i = 0; i < exhalePercent; i++) {
[textures addObject:[UIImage imageNamed:textureName]];
}
}

self.animationImageView.animationImages = textures;
self.animationImageView.animationDuration = time;
self.animationImageView.animationRepeatCount = cycles;
[self.animationImageView startAnimating];
}

但是,我希望动画的前半部分花费 x 时间,后半部分花费 y 时间。

我认为以上内容不允许我这样做,只是想知道更好的方法是什么。

非常肯定需要使用

UIView animateWithDuration:animations: completion:

感谢您的帮助。

此代码创建此效果,

最佳答案

UIImageView 上的动画系统非常有限。我建议您使用 2 个 ImageView 进行自己的实现。

您可以使用 UIView animateWithDuration 更改一个 ImageView 中的图像和淡入淡出

我已经为你写了一个方法。请注意:我还没有测试过。

它假定您的框架位于一个名为“frames”的数组中,并且有两个 UIIMageView 彼此重叠放置,称为“imgv1”和“imgv2”

-(void)performAnimationOfFrameAtIndex:(NSNumber*)indexNum
{
int index = [indexNum intValue];
if(index >= frames.count)
{
return;
}
UIImage *img = [frames objectAtIndex:index];

UIImageView *imgIn;
UIImageView *imgOut;
if(index % 2 == 0)
{
imgIn = imgv1;
imgOut = imgv2;
}
else
{
imgIn = imgv2;
imgOut = imgv1;
}
imgIn.image = img;
[self.view sendSubviewToBack:imgIn];

[UIView animateWithDuration:0.1 animations:^
{
imgIn.alpha = 1;
imgOut.alpha = 0;
} completion:^(BOOL finished)
{
[self performSelectorOnMainThread:@selector(performAnimationOfFrameAtIndex:) withObject:[NSNumber numberWithInt:index+1] waitUntilDone:NO];
}];

}

谢谢你的想法,

我更改了上面的代码以获得我想要的效果,现在它完美无缺。即使持续时间为 0 秒,alpha 也会产生“频闪”效果。

这是我的最终代码

享受 100 :-)

- (void) performAnimationOfFrameAtIndex:(NSNumber*)indexNum
{
int index = indexNum.intValue;
if (index >= self.frames.count) return;

UIImage *img = self.frames[index];

UIImageView *imgIn;
UIImageView *imgOut;

float speed = (index <= self.frames.count / 2) ? 0.1 : 1; // first half : second half speed.

if (index % 2 == 0) {
imgIn = self.animationImageViewOne;
imgOut = self.animationImageViewTwo;
}
else {
imgIn = self.animationImageViewTwo;
imgOut = self.animationImageViewOne;
}

imgIn.image = img;

[self.view sendSubviewToBack:imgIn];
[self performSelector:@selector(performAnimationOfFrameAtIndex:) withObject:[NSNumber numberWithInt:index+1] afterDelay:speed];
}

关于ios - 更改动画速度系列图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290765/

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