动画裁剪UIView/ UIImageView



我在accelerometer: didAccelerate中放置了这段代码,它改变了图像的裁剪。基本上,当你倾斜iPad时,图像会被截断(而不是调整大小),这正是我想要的效果。注:self.xPos受加速度计x位置的影响。

UIImage *originalStringImage = [UIImage imageNamed:@"string.png"];
CGImageRef imageRef = CGImageCreateWithImageInRect([originalStringImage CGImage], CGRectMake(0.0f,0.0f, self.xPos+50.0f, 26.0f));
[self.stringImageView setImage:[UIImage imageWithCGImage:imageRef]];
self.stringImageView.frame = CGRectMake(10.0f, self.stringYPos, self.xPos+50.0f, 26.0f);

现在我想做完全相同的事情,虽然作为一个UIView动画。在这些UIView动画参数之间:

UIImageView *pageStringImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, placeString, 0.0f, 42.0f)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:2.0];
[UIView setAnimationDuration:3.0];
pageStringImageView.frame = CGRectMake(10.0f, placeString, 900.0f, 42.0f);
UIImage *originalStringImage = [UIImage imageNamed:@"string.png"];
CGImageRef imageRef = CGImageCreateWithImageInRect([originalStringImage CGImage], CGRectMake(10.0f,placeString, pageStringImageView.frame.origin.x, 42.0f));
[pageStringImageView setImage:[UIImage imageWithCGImage:imageRef]];
[UIView commitAnimations]; 

但是以上并不能完全起作用。事实上,它甚至没有显示图像。我相信这里的主要困难是在UIView动画运行时动态地改变图像的大小。

有什么建议或问题吗?

如果你使用UIImageView的缩放属性(.contentMode属性),这应该是相当简单的。

视图(包括图像视图)可以以多种方式显示内容。图像视图的默认值是缩放内容,所以当你改变图像的框架/边界时,它会相应地缩小/扩大。

所以如果你使用一个标准的UIView动画块来调整UIImageView的帧,它会使图像缩放或缩小。但是如果你改变图像视图的.contentMode属性如果你改变帧,你可以让它裁剪。

例如,UIViewContentModeLeft将内容与视图的左侧对齐,所以如果你调整视图的宽度,它将从右侧"裁剪"。检查UIView文档,查看contentMode的所有值。所以基本上,只是动画你的视图的帧变化,但设置适当的contentMode给你想要的裁剪效果。你可能需要确保你的视图被设置为clip to bounds,尽管我有一种感觉,图像视图默认是这样做的。

最新更新