2012-05-13 6 views
5

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

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]; 
+1

実際に私は彼が翻訳を意味したと思う、数学翻訳ではオブジェクトを別の座標に移動している – MCKapur

答えて

2

歩く男例:

私はまったく同じタスクを扱ってきたが、私は6足歩行で、12個のフレームを持って実行しているクモをしなければなりませんでした。 実際に行うことは非常に難しく、完璧に数ヶ月かかった。 目が覚める人の例は、通常、イメージフレーム(First Leg、Last Leg)の配列をUIImageViewのanimationImagesプロパティに設定することによって行われます。 次に、キャラクターを左右に動かすことでアニメーションをオン/オフし、これにより歩行の錯覚を作り出します。 大きな問題は、加速の錯覚を作りたいときに発生します。アニメーションの再生中にアニメーションの時間を変更する方法はありません。これは克服するのが非常に難しい大きな後退です。ここで

私はこの問題を克服するために生成されるコードは次のとおりです。ここで

あなたは歩行脚フレーム、ステップごとのフレームを持つ配列を定義します。ここで

animationImagesSpider = [NSArray arrayWithObjects: 
[UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], nil]; 

あなたはUIImageViewに配列を添付する:

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

を今、あなたは、単に[imgViewSpider startAnimating]を呼び出す場合。アニメーションを停止するまで一定の速度でアニメーションを開始します。私は、各ステップのための短いアニメーションを果たしている再帰を使用している、これを克服し、これは各ステップ間の期間に調整することを可能にするには:常にaccSp値を変更することにより

- (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)]; 

} 

を、私は歩行中に歩行速度を制御することができます。

+0

ありがとう、私はしようとしている!チャオ、ジュゼッペ – Beppino66

0

第2アニメーションtransl2を作成する必要があります。このアニメーションはイメージをスワップします。 Transl1アニメーションの途中になるように、durationをtransl1 durationの半分に設定する必要があります。

transl1.duration = 3

transl2.duration = 1.5

+0

ありがとう、それは大丈夫です。私はまた、img1に戻って、img2に戻っていきたいと思います。モーションをシミュレートするために...コードの一部でこれを言うことができますか? ciao – Beppino66

+0

画像を切り替えることで動きを刺激する方法ははっきりしません。 –

+0

私の混乱のためにすみません...今、私はどのようにレイヤーを移動、回転などで画面に移動するのかを知っています...問題は、ayerの内容が同じ画像であり、アニメーション中に変更したいと思っています(例えば歩いている人)ので、私は画像のセットの間でループする必要があります:img1、img2、img1、img2 ....翻訳中... – Beppino66

1

他のポスターなどの新しいイメージにレイヤのコンテンツプロパティをアニメーション化第二アニメーションを作成する、と述べました。

私は両方のアニメーションをアニメーショングループに入れ、レイヤーにアニメーショングループを追加することをお勧めします。次に、両方のアニメーションの時間と開始時間を簡単に制御できます。あなたはアニメーションの途中で起こるように計時された、全期間の一部にわたって画像交換を行うことができます。

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

+0

Duncanに感謝します! ciao – Beppino66

関連する問題