5

UIImageView で画像を下にスライドさせようとしていますが、UIContentMode とアニメーション プロパティのどの組み合わせが適切かわかりません。画像は常に同じサイズである必要があり、引き伸ばされるべきではありません...私が望むのは、最初は何も表示されず、次にフレームが伸びて画像が表示されることだけです。

私が言いたいことを理解すれば、たぶん簡単です:

私の問題の図

簡単に聞こえるかもしれませんが、UIImageView にどの UIContentMode を使用し、どのプロパティをアニメーション化すればよいのでしょうか? ありがとうございました!

4

2 に答える 2

8

私はあなたのリードを取り、スクリーンキャストも作成しました。これはあなたが考えていたことでしたか?

ビデオでキャプチャしやすいように、アニメーションを無限に繰り返すようにしましたが、ボタンを押すだけで開始でき、ポップオーバーとそのコンテンツを表示して固定し、反転して再び非表示にすることができます。

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>.

これが機能するかどうか、またはこれを設定するためにさらにヘルプが必要かどうかを示します。

于 2011-07-28T17:27:02.773 に答える
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){  }];
于 2011-07-27T12:38:19.370 に答える