我正在尝试为图像的高度设置动画(从0像素到480像素的高度),以创建从上到下渲染图像的效果。
使用UIImageView我注意到它在Interface Builder中显示正确。但是当它在模拟器中运行时,大小(宽度和高度)总是设置为图像的大小;意思是,如果我将图像视图的高度设置为原始高度的50%,则图像仍然以全高渲染。
我也试过用UIImage做这个效果。但是,虽然图像的大小看起来是正确的,但图像会缩放以反映尺寸/宽高比。
问题: 如何在不缩放图像的同时实现这种动态尺寸调整(即图像尺寸的动画)?我想过使用CGImageCreateWithMask,但我很确定这会造成巨大的性能打嗝。
*更新*
我正在寻找的效果是这样的: 通过使图像从高到高(从一个窗口拉出一组百叶窗)的高度增长来为图像设置动画。此图像无法缩放(因为它会失去看起来像“盲目”的视觉效果)。此图像还必须呈现在另一个图像的顶部。总共有2张图片。
*答案*
对于最顶层的imageview,我将内容模式设置为Top(因此它不会缩放)。然后在代码中,我将clipsToBounds设置为True。现在我能够为最顶层的imageview高度设置动画,从而为我提供我想要的效果。
答案 0 :(得分:8)
使用像这样的动画块:
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];
答案 1 :(得分:2)
您可能想要查看动画块。他们在这里记录得很彻底:
那里的所有代码都是相关的,因为UIImageView是UIView的子类。
快乐的编码。
答案 2 :(得分:2)
只是一个建议,假设你有两个图像:A和X(X射线图像):
+-------+ +-------+
| | | |
| | | |
| A | | X |
| | | |
| | | |
+-------+ +-------+
动态地你可以创建一个像素高的图像(临时),从X部分复制内容,把它放在A:
之上+-------+ +-------+ +-------+
| | | temp1 | < | |
| | +-------+ | |
| A | | X |
| | | |
| | | |
+-------+ +-------+
在循环中,动态创建/调整临时图像的大小,并从X复制更多内容:
+-------+ +-------+ +-------+
| | | temp2 | < | |
| | | | | |
| A | +-------+ | X |
| | | |
| | | |
+-------+ +-------+
+-------+ +-------+ +-------+
| | | temp3 | < | |
| | | | | |
| A | | | | X |
| | +-------+ | |
| | | |
+-------+ +-------+
+-------+ +-------+ +-------+
| | | temp4 | < | |
| | | | | |
| A | | | | X |
| | | | | |
| | +-------+ | |
+-------+ +-------+
+-------+ +-------+ +-------+
| | | tempX | < | |
| | | | | |
| A | | | | X |
| | | | | |
| | | | | |
+-------+ +-------+ +-------+
答案 3 :(得分:2)
正如原帖中提到的,这是我似乎偶然发现的答案:
对于最顶层的imageview,我将内容模式设置为Top(因此它不会缩放)。然后在代码中,我将clipsToBounds设置为True。现在我能够为最顶层的imageview高度设置动画,从而为我提供我想要的效果。
答案 4 :(得分:0)
尝试将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;
答案 5 :(得分:0)
您应该查看Flip Clock的iPad教程。它是核心动画,因此有性能奖励。