- (voID) moveTiles:(NSArray*)tilesToMove { [UIVIEw beginAnimations:@"tileMovement" context:nil]; [UIVIEw setAnimationDuration:0.1]; [UIVIEw setAnimationDelegate:self]; [UIVIEw setAnimationDIDStopSelector:@selector(tilesstoppedMoving:finished:context:)]; for( NSNumber* aNumber in tilesToMove ) { int tileNumber = [aNumber intValue]; UIVIEw* aVIEw = [self vIEwWithTag:tileNumber]; aVIEw.frame = [self makeRectForTile:tileNumber]; } [UIVIEw commitAnimations];}
Mac版本使用CATransaction对动画进行分组,如下所示:
- (voID) moveTiles:(NSArray*)tilesToMove { [CATransaction begin]; [CATransaction setAnimationDuration:0.1]; [CATransaction setAnimationTimingFunction:[camediatimingFunction functionWithname:kcamediatimingFunctionEaseInEaSEOut]]; [CATransaction setCompletionBlock:^{ [gameDelegate tilesMoved]; }]; for( NSNumber* aNumber in tilesToMove ) { int tileNumber = [aNumber intValue]; NSVIEw* aVIEw = [self vIEwWithTag:tileNumber]; [[aVIEw animator] setFrame:[self makeRectForTile:tileNumber]]; } [CATransaction commit];}
动画执行正常,但持续时间为1.0秒.我可以更改setAnimationDuration:调用任何东西,或者完全省略它,并且每次动画的持续时间仍为1.0秒.我也不认为setAnimationTimingFunction:call正在做任何事情.但是,setCompletionBlock:正在运行,因为该块在动画完成时正在执行.
我在这做错了什么?
解决方法 如果我没有弄错你就不能使用CoreAnimation直接为NSVIEw制作动画.为此你需要NSAnimationContext和[NSVIEw animator]. CATransaction仅适用于CALayers. 总结以上是内存溢出为你收集整理的objective-c – 为什么我的CATransaction不遵守我设定的持续时间?全部内容,希望文章能够帮你解决objective-c – 为什么我的CATransaction不遵守我设定的持续时间?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)