objective-c – 如何循环CATransaction块中包含的几个CABasicAnimations?

objective-c – 如何循环CATransaction块中包含的几个CABasicAnimations?,第1张

概述在 Xcode 4.3.2中使用Obj.-c for iPhone 5.1;我创建了一个CALayers数组,所有这些都来自同一个图像.然后,我希望通过CATransactions分组,同时将CABasicAnimation应用于阵列中的每个CALayer.这一切都有效.但是,我想重复调用CATransactions中包含的CABasicAnimations块,但是每次同时执行块时都能够单独修改每 在 Xcode 4.3.2中使用Obj.-c for iPhone 5.1;我创建了一个CALayers数组,所有这些都来自同一个图像.然后,我希望通过CATransactions分组,同时将CABasicAnimation应用于阵列中的每个CALayer.这一切都有效.但是,我想重复调用CATransactions中包含的CABasicAnimations块,但是每次同时执行块时都能够单独修改每个动画的属性.例如,我有动画的值,我想每次为每个图层上的动画随机更改动画.因为我想重复相同的基本动画,但要进行属性修改;将动画的repeatCount属性设置为某个高值将无效.我尝试在makeSwarm方法中使用for循环重复调用animate方法,使用animationDIDStop引发另一个animate方法调用但最终发生的是新调用是使用CATransaction块而不是在最后,并且还有方法调用本身(在animate方法的末尾放置[self animate];);这一切都不起作用.这是基本代码.我认为这很简单,但我没有看到重要的事情.谢谢,赛斯

VIEwController.h

#import <QuartzCore/QuartzCore.h>#import <UIKit/UIKit.h>@interface VIEwController : UIVIEwController{    UIImage *beeImage;    UIImageVIEw *beeVIEw;    CALayer *beeLayer;    CABasicAnimation *animat;       NSMutableArray *beeArray;    NSMutableArray *beeanimArray;}@property(retain,nonatomic) UIImage *beeImage;@property(retain,nonatomic) NSMutableArray *beeArray;@property(retain,nonatomic) NSMutableArray *beeanimArray;@property(retain,nonatomic) UIImageVIEw *beeVIEw;@property(retain,nonatomic) CALayer *beeLayer;@property(retain,nonatomic)CABasicAnimation *animat;-(voID) animate;-(voID) makeSwarm;@end

VIEwController.m

-(voID) makeSwarm{    self.vIEw.layer.backgroundcolor = [UIcolor orangecolor].CGcolor;    self.vIEw.layer.cornerRadius = 20.0;    self.vIEw.layer.frame = CGRectInset(self.vIEw.layer.frame,20,20);    CGRect beeFrame;    beeArray = [[NSMutableArray alloc] init];    beeImage = [UIImage imagenamed:@"bee50x55px.png"];    beeFrame = CGRectMake(0,beeImage.size.wIDth,beeImage.size.height);    int i;    CALayer *p = [[CALayer alloc] init];    for (i = 0; i < 3; i++) {        beeVIEw = [[UIImageVIEw alloc] initWithFrame:beeFrame];        beeVIEw.image = beeImage;            beeLayer = [beeVIEw layer];        [beeArray addobject: beeLayer];          p = [beeArray objectAtIndex: i];            [p setposition:CGPointMake(arc4random()%320,arc4random()%480)];        [self.vIEw.layer addSublayer:p];    }     [self animate]; }-(voID)animate{    //the code from here to the end of this method is what I would like to repeat as many times as I would like    [CATransaction begin];    int i;    for (i = 0; i < 3; i++) {          animat = [[CABasicAnimation alloc] init];        [animat setFromValue:[NSValue valueWithCGPoint:CGPointMake(arc4random()%320,arc4random()%480)]];        animat.tovalue = [NSValue valueWithCGPoint:CGPointMake(arc4random()%320,arc4random()%480)];        [animat setFillMode:kCAFillModeForwards];        [animat setRemovedOnCompletion:NO];        animat.duration=1.0;        CALayer *p = [[CALayer alloc] init];        p = [beeArray objectAtIndex: i];         [p addAnimation:animat forKey:@"position"];    }        [CATransaction commit];     }
解决方法 我相信我已经为自己回答了这个问题.我在循环结束时设置了动画的委托(当i == 2时),当动画结束时(指示循环结束),然后从animationDIDStop方法我再次调用方法动画.如果有一个比这更优雅或无故障的解决方案,我会全神贯注并接受它作为答案. 总结

以上是内存溢出为你收集整理的objective-c – 如何循环CATransaction块中包含的几个CABasicAnimations?全部内容,希望文章能够帮你解决objective-c – 如何循环CATransaction块中包含的几个CABasicAnimations?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1045631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存