在我的应用程序中确定我有一个图像,我想慢慢向用户显示。所以我不想调整图像的大小,我希望在背景中有完整的图像,然后慢慢地显示从上到下的更多图像。我正在使用动画创建一个垂直进度条,我使用动画完成,并且工作正常。
进度条本身的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图像的帧的变化,以便将图像慢慢裁剪为它需要的任何大小。
答案 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];
}
希望能帮助其他想要达到同样目标的人!!