[英]Animating a UIImage or 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];
您可能想要查看动画块。 他们在这里记录得非常彻底:
所有代码都是相关的,因为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教程。 它具有核心动画,因此具有性能加值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.