iPhone裁剪部分图像,无需使用动画调整大小

时间:2012-09-25 13:49:44

标签: objective-c animation

在我的应用程序中确定我有一个图像,我想慢慢向用户显示。所以我不想调整图像的大小,我希望在背景中有完整的图像,然后慢慢地显示从上到下的更多图像。我正在使用动画创建一个垂直进度条,我使用动画完成,并且工作正常。

进度条本身的alpha值为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图像的帧的变化,以便将图像慢慢裁剪为它需要的任何大小。

1 个答案:

答案 0 :(得分:2)

最后!!

经过两天的玩弄,终于找到了答案。当我找到这个帖子时,我正在做更多的测试和搜索

Animating a UIImage or 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设置为bottom,如您所见,将动画块中的图像高度设置为MINUS图像高度。如果你想从上到下进行动画制作,那么只需反过来做,然后将内容模式改为顶部,即。

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

}

希望能帮助其他想要达到同样目标的人!!