0

実装する必要のあるアニメーション。 私を助けてください。

私はたくさんの方法を試しましたが、スムーズに行うことができませんでした。私はアニメーションの新しいBであり、助けていただければ幸いです。

私が試したコード:

2つの配列に追加する必要のあるボタンとラベルがあります。eventBtnsPopUpArrayおよびeventLabelsPopUpArray。それらをループで追加しようとしましたが、アニメーションがスムーズではありません。

if ([eventBtnsPopUpArray count]>0)
{           

    CABasicAnimation* scalingAnimation;
    scalingAnimation = [CABasicAnimation animationWithKeyPath:@"frame.size"];;
    scalingAnimation.fromValue = [NSNumber numberWithFloat:0];
    scalingAnimation.toValue = [NSNumber numberWithFloat:1024];
    scalingAnimation.duration = 5.0;
    scalingAnimation.cumulative = YES;
    scalingAnimation.removedOnCompletion = NO;
    scalingAnimation.fillMode = kCAFillModeForwards;
    [calendarEventView.layer addAnimation:scalingAnimation forKey:@"rotationAnimation"];


  for (int k=0; k<[eventBtnsPopUpArray count]; k++)
{
    UIButton *btn = [eventBtnsPopUpArray objectAtIndex:0];
    UILabel *lbl = [eventLabelsPopUpArray objectAtIndex:0];



    [UIView animateWithDuration:2
                          delay:0
                        options: UIViewAnimationCurveEaseOut
                     animations:^{

                         [self addSubview:btn];
                         [self addSubview:lbl];

                     }
                     completion:^(BOOL finished){
                         [self pauseLayer:calendarEventView.layer];

                         [self resumeLayer:calendarEventView.layer];
                     }
     ];


}


if (calendarEventView.frame.size.width < 1024) {
    [UIView beginAnimations:@"DrawLineTillEnd" context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    calendarEventView.frame = CGRectMake(0, 65, 1024, 7);
    [UIView commitAnimations];
}
}

//レイヤー機能を一時停止して再開します

    -(void)pauseLayer:(CALayer*)layer
    {
     CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
     layer.speed = 0.0;
    layer.timeOffset = pausedTime;
    }  

    -(void)resumeLayer:(CALayer*)layer
    {
    CFTimeInterval pausedTime = [layer timeOffset];
    layer.speed = 1.0;
    layer.timeOffset = 0.0;
    layer.beginTime = 0.0;
    CFTimeInterval timeSincePause = 
    [layer convertTime:CACurrentMediaTime()  fromLayer:nil] - pausedTime;
    layer.beginTime = timeSincePause;
    }
4

2 に答える 2

0

コアアニメーションを使用する必要はないと思います.NSTimerを使用し、変化する変数を使用してUIViewのフレーム(幅)を調整するだけです...幅をチェックする単純な条件ステートメント(ifステートメント)で停止できます特定のポイントで、最初に必要な UIButton を追加します。このボタンをクリックすると、次の if ステートメントで定義された次の幅に達するまで、NSTimer のコードをトリガーして行の成長を続ける BOOLEAN が変更されます。等

于 2013-02-20T06:40:05.837 に答える
0

coreplot または coreanimation を使用してこれを行う方法はわかりませんが、ビュー アニメーションによってこれを行うのは非常に簡単です。

例えば

-(void)animateLine{
   UILabel *labelObj = [[UiLabel alloc]init];
   //Set background image and height of label say 100 pixel
   for(int incrementer = 0; incrementer<100; incrementer ++)
    {
         [UIView beginAnimations:nil context:nil];
         [UIView setAnimationDuration:0.01];
         [labelObj setFrame:cgRectMake(0,100,incrementer,20)];
         [uiview commitAnimation];
    }
}
于 2013-02-20T06:42:25.943 に答える