1

私はこれに長い間苦労してきましたが、ここで何が問題なのかわかりません。私は実際にアイデアを持っています - 私が追加してアニメーション化しようとしているビューがまだビュー階層に含まれていないので、コアアニメーションがアニメーション化するためにサイクルを無駄にしていないと思います. プロジェクトで他のいくつかのアニメーションを正常に実行しましたが、ViewController のviewDidLoadメソッドでそれらを実行しています。これが私のコードです:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.opaque = NO;
        self.backgroundColor = [UIColor colorWithWhite: 1.0 alpha: 0.7];
        [self addTrack];
    }
    return self;
}

- (void)addTrack
{
    //init the track here
    UIView *track = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
    track.backgroundColor = [UIColor whiteColor];
    [self addSubview: track];

    //transform the track for its initial scale
    float scaleFactorX = 0.01;
    track.layer.anchorPoint = CGPointMake(0, 0);
    track.layer.position = CGPointMake(0, 0);
    track.transform = CGAffineTransformMakeScale(scaleFactorX, 1.0);

    //animate the track here
    [UIView animateWithDuration:8 delay:0.3 options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         NSLog(@"animation is running.");
                         track.transform = CGAffineTransformIdentity;
                     }
                     completion:^(BOOL finished) {
                         NSLog(@"animation finished.");
                     }];
}

その結果、「トラック」はすぐに元のサイズにスケーリングされます。また、 didMoveToSuperviewメソッド内でaddTrackを呼び出そうとしたので、含まれているビューがビュー階層に追加されていることを確認できますが、結果は同じです。含むビューにアルファアニメーションを追加するなど、そのクラス内で他のアニメーションを試しましたが、再び成功しませんでした..

4

2 に答える 2

4

ビューを読み込んだ後にアニメーションを呼び出して、表示できるようにしてください。

-(void)viewDidAppear:(BOOL)animated
{
     [self addTrack];
}
于 2013-10-09T11:26:07.027 に答える