2011-10-18 76 views
0

我有这块代码放置在accelerometer: didAccelerate,它改变了图像的裁剪。基本上,当你倾斜一个iPad的图像被截断(不调整),这正是我正在寻找的效果。注意:self.xPos受Accelerometer.x位置影响。动画UIView/UIImageView的裁剪

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动画运行时动态改变图像的大小。

任何建议或问题?

回答

4

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

视图 - 包括图像视图 - 可以以多种方式显示那里的内容。图像视图的默认设置是缩放内容,因此当您更改图像的边框时,会根据需要缩小/扩大。

因此,如果您要使用标准的UIView动画块来调整UIImageView的框架,它会为图片缩放或缩小设置动画效果。但是如果你改变图像视图的.contentMode属性,如果你改变框架,你可以让它裁剪。

例如,UIViewContentModeLeft将使内容与视图的左侧对齐,因此如果您调整视图的宽度,它将从右侧“裁剪”。检查UIView文档以查看contentMode的所有值。所以基本上,只是动画你的视图的框架更改,但适当设置contentMode给你所需的裁剪效果。您可能需要确保您的视图设置为剪辑到边界,尽管我有一种感觉,图像视图默认会执行此操作。

+0

你的回答非常丰富。做得好! –

+1

此外,剪辑到界限的部分造成了差异。没有它,我无法得到它的工作:'imageview.clipsToBounds = YES' –