gpt4 book ai didi

objective-c:执行多个 transitionWithView 动画 block

转载 作者:太空狗 更新时间:2023-10-30 03:50:08 31 4
gpt4 key购买 nike

我正在尝试制作一个简单的 Simon 游戏(闪烁的颜色序列越来越多,用户必须尝试重复该序列)。我要解决的方法是使用 4 个带有 8 个图像的 UIView。所以有一个 UIView 用于红色、蓝色、绿色和黄色。并且我有深绿、浅绿、深红、浅红等gif。

所以在我的代码中,我使用了 UIView 的 transitionWithView 动画 block :UIView imageView.image 默认为深色图像,此 block 正在过渡为浅色图像,并在完成后返回深色图像(使其看起来“亮起来”)。

- (void) animateColor:(NSString *)color
{
...
//do stuff to default the dark and light image name and which UIView to animate based on the color parameter
...
[UIView transitionWithView:imageView
duration:.5
options: UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAutoreverse
animations:^{
imageView.image = [UIImage imageNamed:lightImage];
}
completion:^(BOOL finished){
if (finished){
imageView.image = [UIImage imageNamed:darkImage];
}
}];
}

当我用一种颜色调用此代码的方法时,它工作正常。

问题是,假设我有一个 NSArray 或我想要按顺序设置动画的颜色。因此,如果我的数组是“蓝色”、“绿色”,我希望使用蓝色调用 transitionWithView,为蓝色 View 设置动画,然后为绿色​​ View 设置动画。现在,它将同时为绿色 View 和蓝色 View 设置动画。

我现在正在尝试使用 NSTimer,但运气不太好。

如有任何建议,我们将不胜感激。

最佳答案

当我尝试连续执行多个转换时,我遇到了类似的问题。我通过简单地在完成 block 中设置一个状态变量来解决它。然后这个状态变量启用下一个转换的条件。好吧,因为我使用带有 runloop 方法的计时器,所以我的工作在这里更容易:

- (void) runloop {

static int step = 1;

if (step == 1)
{
step = 0;
[UIView transitionWithView:imageView
duration:1
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{ imageView.image = [UIImage imageNamed:lightImage]; }
completion:^(BOOL finished){ step = 2; }];
}

if (step == 2)
{
step = 0;
[UIView transitionWithView:imageView
duration:1
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{ imageView.image = [UIImage imageNamed:darkImage]; }
completion:^(BOOL finished){ step = 0; }];
}
}

这样您就可以进行多种转换而不会迷失在嵌套 block 中。

关于objective-c:执行多个 transitionWithView 动画 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11284341/

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