我移植了iPhone應用程序的Mac OS X.此代碼是被成功地使用在iPhone上:爲什麼我的CATransaction不遵守我設定的時間?
- (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:正在工作,因爲該塊在動畫完成時正在執行。
我在這裏做錯了什麼?
啊。我找不到任何明確說明的文件,但是,那肯定會解釋它。 – zpasternack 2010-11-10 04:33:38