zpa*_*ack 5 macos cocoa objective-c catransaction
我正在将iPhone应用程序移植到Mac OS X.此代码已在iPhone上成功使用:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
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];
}
Run Code Online (Sandbox Code Playgroud)
动画执行正常,但持续时间为1.0秒.我可以更改setAnimationDuration:调用任何东西,或者完全省略它,并且每次动画的持续时间仍为1.0秒.我也不认为setAnimationTimingFunction:call正在做任何事情.但是,setCompletionBlock:正在运行,因为该块在动画完成时正在执行.
我在这做错了什么?
如果我没有弄错你就不能使用CoreAnimation直接为NSView制作动画.为此你需要NSAnimationContext和[NSView animator].CATransaction仅适用于CALayers.
归档时间: |
|
查看次数: |
1552 次 |
最近记录: |