2

testLabelという名前のUILabelをストーリーボードの位置A(140,40)にドラッグしました。Aから位置B(100,250)までアニメートしたいと思います。だから私は次のようにコードを書きました。

#import "testViewController.h"

@interface testViewController ()
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@end

@implementation testViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [UIView animateWithDuration:1.0
                          delay:1.0
                        options:UIViewAnimationOptionCurveLinear
                     animations:^{
                         CGPoint b = CGPointMake(100, 250);
                         self.testLabel.center = b;
                     }
                     completion:nil];
}

@end

AからBにアニメーション化する代わりに、シミュレーターはポイント(0,0)からポイントAにラベルをアニメーション化します。どこで間違ったのですか?

4

2 に答える 2

1

viewDidLoadメソッドではアニメーションを実行しません。この時点で、iOSはサブビューのフレームを完全に計算していません。

viewDidAppearなどのメソッドでこのアニメーションを実行すると、どうなりますか?

于 2012-12-28T05:16:54.030 に答える
0

PaReeOhNosが言ったように、開始座標が設定されるまでこれを延期するviewDidAppeartestLabel、次のようにすることができます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.testLabel.center = CGPointMake(140, 40);

    [UIView animateWithDuration:1.0
                          delay:1.0
                        options:UIViewAnimationOptionCurveLinear
                     animations:^{
                         self.testLabel.center = CGPointMake(100, 250);
                     }
                     completion:nil];
}
于 2012-12-28T05:42:16.523 に答える