2011-07-27 34 views
5

私はUIImageViewで画像をスライドさせようとしていますが、UIContentModeとアニメーションプロパティの組み合わせが正しいかどうかはわかりません。 イメージは常に同じサイズでなければならないし、縞模様にしてはいけません...私が望むのは、最初に何も見えず、次に​​フレームが伸びてイメージを露呈させるということです。あなたは私が何を意味するか見る場合UIViewアニメーションを下に移動

多分それは簡単です:

Illustration of my Problem

だから、それはかなり簡単に聞こえるが、何UIContentMode私はUIImageViewのために使用すべきと私はどのようなプロパティをアニメーション化する必要がありますか?ありがとうございました!

+0

アニメーションを繰り返して表示した後に追加したままにするにはどうすればよいですか?ありがとう。 –

答えて

8

私はあなたの指揮をとり、スクリーンキャストも行いました。 Was this what you had in mind?

アニメーションを無期限に繰り返すので、ビデオで簡単にキャプチャすることができますが、ボタンを押すだけで起動でき、反転表示までポップオーバーとその内容を表示できますもう一度隠される。

CALayerのマスクプロパティを使用してポップオーバーを非表示にし、スライドアニメーションで表示するため、UIViewのアニメーション化ではなく、Core Animationを使用しました。ここで

は、私が使用したコードは、(ビデオと同じ)である:

- (void)viewDidLoad 
{ 

    // Declaring the popover layer 
    CALayer *popover = [CALayer layer]; 

    CGFloat popoverHeight = 64.0f; 
    CGFloat popoverWidth = 200.0f; 

    popover.frame = CGRectMake(50.0f, 100.0f, popoverWidth, popoverHeight); 
    popover.contents = (id) [UIImage imageNamed:@"popover.png"].CGImage; 

    // Declaring the mask layer 
    CALayer *maskLayer = [CALayer layer]; 
    maskLayer.frame = CGRectMake(0, - popoverHeight, popoverWidth, popoverHeight); 
    maskLayer.backgroundColor = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor; 

    // Setting the animation (animates the mask layer) 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
    animation.byValue = [NSNumber numberWithFloat:popoverHeight]; 
    animation.repeatCount = HUGE_VALF; 
    animation.duration = 2.0f; 

    [maskLayer addAnimation:animation forKey:@"position.y"]; 

    //Assigning the animated maskLayer to the mask property of your popover 
    popover.mask = maskLayer; 

    [self.view.layer addSublayer:popover]; 

    [super viewDidLoad]; 
} 

は注:あなたは、あなたのプロジェクトにQuartzCoreフレームワークをインポートし、ヘッダファイルに次の行を記述する必要があります#import <QuartzCore/QuartzCore.h>

これはあなたのために働くか、これを設定するためのヘルプが必要かどうかを伝えます。

+0

うわー、あなたの非常に詳細な答えに感謝します!私は前にCALayerを使いこなしたことはありませんでしたが、あなたが提供したコードはまさに私が必要とするものではありません。私はその周りで遊ぶよ。 – denbec

2

このコードを試してください。 UIImageViewをimageViewと見なしてください。

imageView.contentMode = UIViewContentModeScaleAspectFill; 
CGRect imageRect = imageView.frame; 
CGRect origImgRect = imageRect; 
imageRect.size.height = 5; 
imageView.frame = imageRect; 

[UIView animateWithDuration:2.0 
    animations:^{imageView.rect = origImgRect;} 
    completion:^(BOOL finished){ }]; 
+0

ねえ、あなたはimageView.frameを意味すると思います。そして、何が起こっているのかは[ここ](http://screencast.com/t/e98VLE3if)で見ることができます。しかし、それは全体のビューを移動するだけで、私はちょうどその場所に留まるが、可視領域を下に移動します。 – denbec

+0

はい、フレームです。実際に私がやっているのは、最初に、画像ビューのフレームの高さを5に設定して、矢印だけを表示することです。次に、実際の高さをアニメーションで設定します。私はあなたが簡単にここでものをデバッグすることができますね。 – Ilanchezhian

+0

上記のコメントにリンクされているビデオをチェックアウトしましたか?あなたは、あなたのコードで、切り抜きが成長するのではなく、全体の視点が動くのを見るでしょう... – denbec

関連する問題