1

私のアプリケーションでは、ユーザーにゆっくりと公開したい画像があります。したがって、画像のサイズを変更したくはありません。背景に完全な画像を配置してから、上から下に向かってゆっくりと画像を表示したいと思います。アニメーションを使用して行ったアニメーションを使用して垂直プログレスバーを作成していますが、正常に動作します。

プログレスバー自体のアルファは0.5なので、背後の画像を見ることができます。私はアニメーションを使用して、プログレスバーに応じて設定された色のビューであるアニメーションのときにプログレスバーを伸ばします。それはうまく見えるので、私はそれを伸ばしてもかまいません。ただし、バーの後ろの画像を引き伸ばしたくないので、プログレスバーがアニメーション化したのと同じだけの画像を表示したいと思います。つまり、プログレスバーが80%完成しているとすると、背後の画像の高さの80%が表示され、幅は変更されず、背後の画像のサイズは変更されず、さらに多くの画像が表示されます。

画像のプログレスバーで使用しているのと同じコードを使用してみましたが、プログレスバーのレベルが異なり、引き伸ばされた画像が奇妙に見えるため、一貫性がないように見えます。

コードを動的にトリミングするさまざまな方法を検討してきましたが、アニメーションでそれを行う方法が見つからないようです。そのようなタスクを実行するための組み込みの方法はありますか?私が見つけたクロップコードの多くは、画像のサイズを変更しているようです。

これを使用してプログレスバーをアニメーション化しています

 [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:3.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    transform = CGAffineTransformMakeScale(1,transformValue);
    image.transform = transform;
    image.center = CGPointMake(xValue, yValue);

[UIView commitAnimations];

画像の切り抜きをアニメーション化するために、同様の何かを使用できることを望んでいました。

どんな助けでも大歓迎です!!

多くのテストの地獄の後、私はこの点に到達することができました:

    [UIView animateWithDuration:3.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{


                         UIImage *image = [UIImage imageNamed:@"button_connectMe.png"];
                     CGImageRef tmpImgRef = image.CGImage;
                     CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 30, image.size.width, image.size.height));

                     UIImage *topImage = [UIImage imageWithCGImage:topImgRef];
                    imgView.image = topImage;
                     imgView.frame = CGRectMake(0, 180, topImage.size.width, topImage.size.height);

                 } 
                 completion:^(BOOL finished) {
                     NSLog(@"Final method");


                 }
 ];

これにより、画像が半分にトリミングされ、元の画像サイズが維持されますが、問題は、新しいトリミングされた画像がこのコード行に即座に適用されることです。

 UIImage *topImage = [UIImage imageWithCGImage:topImgRef];
                        imgView.image = topImage;

アニメ化されていませんが、この部分は

imgView.frame = CGRectMake(0、180、topImage.size.width、topImage.size.height);

アニメーション化されています。CGI画像のフレームの変化を何らかの方法でアニメーション化して、画像が必要なサイズにゆっくりとトリミングされるようにする必要があります。

4

1 に答える 1

2

最後に!!

これで2日間遊んだ後、ついに答えが見つかりました。このスレッドを見つけたとき、さらにテストと検索を行っていました

UIImage または UIImageView をアニメーション化しますか?

ニーズに合わせてコードを変更し、最終的にこれになりました

-(void)cropAnimateBottom
{
    UIImage *image = [UIImage imageNamed:@"bar.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(150, 150, image.size.width, 0)];
    imageView.image = image;
    [imageView setClipsToBounds:YES];
    [imageView setContentMode:UIViewContentModeBottom];

    [self.view addSubview:imageView];


    [UIView animateWithDuration:3.0f
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^(void) {
                         imageView.frame = CGRectMake(150, 150, image.size.width, -image.size.height);
                     }
                     completion:NULL];

}

contentMode の下部を設定し、ご覧のとおり、アニメーション ブロックの画像の高さを画像の高さからマイナスに設定します。上から下にアニメーション化する場合は、逆の方法でコンテンツ モードを上に変更します。つまり、

-(void)cropAnimateTop
{
    UIImage *image = [UIImage imageNamed:@"bar.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 100, image.size.width, 0)];
    imageView.image = image;
    [imageView setClipsToBounds:YES];
    [imageView setContentMode:UIViewContentModeTop];

    [self.view addSubview:imageView];


    [UIView animateWithDuration:3.0f
                          delay:0.0f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^(void) {
                         imageView.frame = CGRectMake(0, 100, image.size.width, image.size.height);
                     }
                     completion:NULL];

}

同じことを達成しようとしている他の人々を助けることを願っています!!

于 2012-09-26T11:50:44.170 に答える