5

翻訳中に画像のセットでmyLayer.contentsを変更するにはどうすればよいですか(つまり、img1とimg2を切り替える)?ありがとう!

UIImage *myImage = [UIImage imageNamed:@"img1.png"];
CALayer *myLayer = [CALayer layer];
myLayer.contents = (id)myImage.CGImage;
myLayer.Position = CGPointMake(0,0);
myLayer.Bounds=CGRectMake(0.0, 0.0, 50, 50);
[self.view.layer addSublayer:myLayer];

//translation1
CGPoint startPt = CGPointMake(10,10);
CGPoint endPt = CGPointMake(100,100);    
CABasicAnimation *transl1 = [CABasicAnimation animationWithKeyPath:@"position"];
transl1.removedOnCompletion = FALSE;
transl1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transl1.fromValue = [NSValue valueWithCGPoint:startPt];
transl1.toValue = [NSValue valueWithCGPoint:endPt];
transl1.duration = 3;
transl1.fillMode = kCAFillModeForwards;
transl1.beginTime = 0;
[myLayer addAnimation: transl1 forKey:  nil];
4

3 に答える 3

2

ウォーキングマンの例:

私はまったく同じタスクを処理しましたが、6レッグウォークで12フレームのランニングスパイダーを実行する必要がありました。実際、それを行うのは非常に困難で、完成するまでに数か月かかりました。目覚めている人の例は通常、画像フレームの配列(最初のレッグ、最後のレッグ)をUIImageViewのanimationImagesプロパティに設定することによって行われます。次に、キャラクターを左右に動かしながらアニメーションのオンとオフを切り替えます。これにより、歩くような錯覚が生じます。ここで、加速の錯覚を作成したいときに大きな問題が発生します。アニメーションの再生中にアニメーションの長さを変更する方法はありません。これは、克服するのが非常に難しい大きな後退です。

この問題を解決するために私が作成したコードは次のとおりです。

ここでは、歩行脚のフレーム、ステップごとのフレームを使用して配列を定義します。

animationImagesSpider = [NSArray arrayWithObjects:
[UIImage imageNamed:@"1@2x.png"], [UIImage imageNamed:@"2@2x.png"], [UIImage imageNamed:@"3@2x.png"], [UIImage imageNamed:@"4@2x.png"], [UIImage imageNamed:@"5@2x.png"], [UIImage imageNamed:@"6@2x.png"], [UIImage imageNamed:@"6@2x.png"], [UIImage imageNamed:@"8@2x.png"], [UIImage imageNamed:@"9@2x.png"], [UIImage imageNamed:@"10@2x.png"], [UIImage imageNamed:@"11@2x.png"], [UIImage imageNamed:@"1@2x.png"], nil];   

ここで、配列をUIImageViewにアタッチします。

imgViewSpider = [[UIImageView alloc] initWithFrame:CGRectMake(200,410,100,145)];
imgViewSpider.animationImages = animationImagesSpider;

ここで、単に[imgViewSpiderstartAnimating]を呼び出すと; これにより、アニメーションを停止するまで一定の速度で開始されます。これを克服するために、各ステップで短いアニメーションを再生する再帰を使用しました。これにより、各ステップ間の期間を調整できます。

- (void) spiderRun {

    imgViewSpider.animationDuration= 0.51-(accSp/3.5);
    [imgViewSpider setAnimationRepeatCount:222]; /// this is a dummy value that has no effect because animtion ends after the first frame
    [imgViewSpider startAnimating];
    [self performSelector:@selector(spiderRun) withObject:nil afterDelay: 0.5-(accSp/3.5)];

}

accSp値を絶えず変更することで、歩行中の歩行速度を制御できます。

于 2012-05-13T14:35:07.387 に答える
1

他のポスターが言ったように、レイヤーのコンテンツ プロパティを新しい画像にアニメーション化する 2 番目のアニメーションを作成します。

両方のアニメーションをアニメーション グループに入れ、そのアニメーション グループをレイヤーに追加することをお勧めします。その後、両方のアニメーションの継続時間と開始時間を簡単に制御できます。アニメーションの途中でタイミングを合わせて、合計時間の一部で画像の入れ替えを行うことができます。

beginTime プロパティを使用してアニメーションの開始を設定し、duration プロパティで期間を設定します。

于 2012-05-13T12:01:45.320 に答える
0

2 番目のアニメーション transl2 を作成する必要があります。このアニメーションは画像を入れ替えます。transl1 アニメーションの途中に収まるように、持続時間を transl1 持続時間の半分に設定する必要があります。

transl1.duration = 3

transl2.duration = 1.5

于 2012-05-13T10:47:52.887 に答える