http://childhoodgamedev.qiniudn.com/xincheng_testGif.gif
UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(250, 250, 200, 100)];
label.text = @"Hello world!";
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentLeft;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:25];
[self.view addSubview:label];
CGAffineTransform transform = CGAffineTransformIdentity;
label.transform = CGAffineTransformScale(transform, 2, 2);
[UIView animateWithDuration:4.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
label.transform = CGAffineTransformTranslate(label.transform, -100, 0);
} completion:^(BOOL finished) {
if (finished) {
NSLog(@"label %f %f %f %f", label.frame.origin.x, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
[UIView animateWithDuration:3.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
NSLog(@"label %f %f %f %f", label.frame.origin.x, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
label.transform = CGAffineTransformTranslate(label.transform, 100, 0);
} completion:NULL];
}
}];
UILabel
という名前のインスタンスがありlabel
、 によって 2 倍にスケーリングされCGAffineTransformScale
ます。次に右から左に移動し、アニメーションが完了すると左から右に移動します。
しかし、奇妙な点は、アニメーションの終了点(右から左)、アニメーションの開始点(左から右)である同じ位置に見えないことです。しかし、NSLog は、それらが同じ位置にあることを示しています。
http://childhoodgamedev.qiniudn.com/xincheng_QQ20150306-1.png
state にコメントするとlabel.transform = CGAffineTransformScale(transform, 2, 2);
、すべて問題ありません。ラベルの移動方向が変わると、右→左アニメーションの終了位置が左→右アニメーションの開始位置になります。
したがって、問題の原因はCGAffineTransformScale
. 何か案は?