动画UIImage或UIImageView?

我正在尝试为图像的高度设置动画(从0像素到480像素的高度)以创建从上到下渲染的图像的效果。

使用UIImageView,我注意到它在Interface Builder中显示正确。 但是当它在模拟器中运行时,大小(宽度和高度)总是设置为图像的大小; 意思是,如果我将图像视图的高度设置为原始高度的50%,则图像仍然以全高度渲染。

我也试过用UIImage做这个效果。 但是,尽管图像的大小看起来正确,但缩放图像以反映大小/宽高比。

问题:如何在不缩放图像的同时实现这种动态尺寸调整(即图像尺寸的动画)? 我想过使用CGImageCreateWithMask,但我很确定会产生巨大的性能打嗝。

*更新*

我正在寻找的效果是这样:通过使图像从高到高(从一个窗口拉出一组百叶窗)的高度增长来为图像设置动画。 此图像无法缩放(因为它会失去看起来像“盲目”的视觉效果)。 此图像还必须呈现在另一个图像的顶部。 总共有2张图片。

*答案*

对于最顶层的imageview,我将内容模式设置为Top(因此它不会缩放)。 然后在代码中,我将clipsToBounds设置为True。 现在我能够为最顶层的imageview高度设置动画,从而为我提供我想要的效果。

像这样使用动画块:

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 0)]; imageView.image = ...; [imageView setClipsToBounds:YES]; [imageView setContentMode:UIViewContentModeTop]; [self.view addSubview:imageView]; [imageView release]; [UIView animateWithDuration:4.0f delay:1.0f options:UIViewAnimationOptionCurveEaseIn animations:^(void) { imageView.frame = CGRectMake(0, 0, 320, 480); } completion:NULL]; 

您可能想要查看动画块。 他们在这里记录得很彻底:

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html

所有代码都是相关的,因为UIImageView是UIView的子类。

快乐的编码。

只是一个建议,假设你有两个图像:A和X(X射线图像):

 +-------+ +-------+ | | | | | | | | | A | | X | | | | | | | | | +-------+ +-------+ 

动态地,你可以创建一个像素高的图像(临时),从X部分复制内容,把它放在A:

 +-------+ +-------+ +-------+ | | | temp1 | < | | | | +-------+ | | | A | | X | | | | | | | | | +-------+ +-------+ 

在循环中,动态创建/调整临时图像的大小,并从X复制更多内容:

 +-------+ +-------+ +-------+ | | | temp2 | < | | | | | | | | | A | +-------+ | X | | | | | | | | | +-------+ +-------+ +-------+ +-------+ +-------+ | | | temp3 | < | | | | | | | | | A | | | | X | | | +-------+ | | | | | | +-------+ +-------+ +-------+ +-------+ +-------+ | | | temp4 | < | | | | | | | | | A | | | | X | | | | | | | | | +-------+ | | +-------+ +-------+ +-------+ +-------+ +-------+ | | | tempX | < | | | | | | | | | A | | | | X | | | | | | | | | | | | | +-------+ +-------+ +-------+ 

正如原帖中提到的,这是我似乎偶然发现的答案:

对于最顶层的imageview,我将内容模式设置为Top(因此它不会缩放)。 然后在代码中,我将clipsToBounds设置为True。 现在我能够为最顶层的imageview高度设置动画,从而为我提供我想要的效果。

尝试将UIImageView的contentMode属性设置为以下值之一。 我认为你需要的是UIViewContentModeScaleAspectFit

 typedef enum { UIViewContentModeScaleToFill, UIViewContentModeScaleAspectFit, // contents scaled to fit with fixed aspect. remainder is transparent UIViewContentModeScaleAspectFill, // contents scaled to fill with fixed aspect. some portion of content may be clipped. UIViewContentModeRedraw, // redraw on bounds change (calls -setNeedsDisplay) UIViewContentModeCenter, // contents remain same size. positioned adjusted. UIViewContentModeTop, UIViewContentModeBottom, UIViewContentModeLeft, UIViewContentModeRight, UIViewContentModeTopLeft, UIViewContentModeTopRight, UIViewContentModeBottomLeft, UIViewContentModeBottomRight, } UIViewContentMode; 

你应该看看Flip Clock for iPad教程。 它具有核心动画,因此具有性能奖励。