1

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. 何か案は?

4

0 に答える 0