gpt4 book ai didi

ios - 抽象出动画时知道动画何时完成 iOS

转载 作者:行者123 更新时间:2023-12-01 17:55:53 27 4
gpt4 key购买 nike

有点问题,搜索了一些类似的问题,但无法进行。我有一个简单的按钮动画,我在我制作的实用程序类中的项目中使用它。问题是按钮代码在动画完成之前执行。

实用程序 class.m 中的动画代码:

+(void)buttonBobble:(UIButton *)button{
button.transform = CGAffineTransformMakeScale(0.8, 0.8);
[UIView beginAnimations:@"button" context:nil];
[UIView setAnimationDuration:.5];
button.transform = CGAffineTransformMakeScale(1, 1);
[UIView commitAnimations];
}

我试图确保动画在任何按钮中触发代码之前完成:
[UIView animateWithDuration:0.0f delay:0.0f options: UIViewAnimationOptionTransitionNone  animations:^{
[Utilities buttonBobble:sender];
}completion:^(BOOL finished){
//Do stuff
}];

即使这样可行,我也希望将其抽象到可以执行以下操作的地方:
if([Utilities buttonBobble:sender]){
//Make it send a BOOL so when it's done I execute stuff like normal
}

欢迎任何想法。

最佳答案

更改您的实用程序方法以采用一个完成 block ,该 block 封装了该按钮在完成摆动时需要采取的操作:

+(void)buttonBobble:(UIButton *)button 
actionWhenDone:(void (^)(BOOL))action
{
button.transform = CGAffineTransformMakeScale(0.8, 0.8);
[UIView animateWithDuration:0.5f animations:^{
button.transform = CGAffineTransformMakeScale(1, 1);
}
completion:action];
}

然后,在原始按钮操作方法中,您传递该操作 block ,而不是直接在方法中运行代码:
- (IBAction)buttonAction:(id)sender
{
[Utilities buttonBobble:sender
actionWhenDone:^(BOOL finished){
// Your code here
}];
// Nothing here.
}

作为设计说明,您还可以考虑将该实用程序方法放入 UIButton 上的一个类别中。 :
@implementation UIButton (JMMBobble)

- (void)JMMBobbleWithActionWhenDone:(void (^)(BOOL))action
{
self.transform = CGAffineTransformMakeScale(0.8, 0.8);
[UIView animateWithDuration:0.5f animations:^{
self.transform = CGAffineTransformMakeScale(1, 1);
}
completion:action];
}

然后 Action 看起来像
- (IBAction)buttonAction:(id)sender
{
[sender JMMBobbleWithActionWhenDone:^(BOOL finished){
// Your code here
}];
}

关于ios - 抽象出动画时知道动画何时完成 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17768097/

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