动画UIImage或UIImageView?
我试图给图像的高度(从0像素到480像素的高度)设置动画效果,以创建自上而下呈现图像的效果。动画UIImage或UIImageView?
使用UIImageView我注意到它在界面生成器中显示正确。但是当它在模拟器中运行时,尺寸(宽度和高度)总是设置为图像的大小;意思是说,如果我将图像视图的高度设置为原始高度的50%,则图像仍然呈现为全高。
我也试过用UIImage做这个效果。但是,虽然图像的大小看起来正确,但图像的大小和纵横比都会反映出来。
问题: 如何在不缩放图像的情况下实现这种动态调整大小(即图像大小的动画)?我想过使用CGImageCreateWithMask,但我很确定这会造成巨大的性能问题。
*更新*
,即时通讯寻找的大意是这样的: 通过使它成长的高度,从自顶向下(就像一组百叶窗被拉到一个窗口)动画图像。该图像不能缩放(因为它会失去看起来像“盲目”的视觉效果)。此图片还必须呈现在另一张图片的顶部。所以共有2张图片。
*答案*
对于最顶层的ImageView,我设置了内容模式顶部(所以它不规模)。然后在代码中,我将clipsToBounds设置为True。现在,我可以为最*的imageview高度设置动画效果,从而为我提供所需的效果。
正如原帖子中提到,这里是我似乎在已经迷迷糊糊的回答:
对于最*的imageview,我设置内容模式为Top(所以它不缩放)。然后在代码中,我将clipsToBounds设置为True。现在,我可以为最*的imageview高度设置动画效果,从而为我提供所需的效果。
您可能想要查看动画块。他们记录相当彻底这里:
所有的代码中有相关,因为是UIImageView的UIView的子类。
快乐编码。
尝试将您的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;
使用动画块,像这样:
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];
只是一个建议,假设你有两个图像:A和X(X射线图像):
+-------+ +-------+
| | | |
| | | |
| A | | X |
| | | |
| | | |
+-------+ +-------+
动态则可以创建一个像素高的图像(TEMP),部分复制从X的内容,把它放在A的顶部:
+-------+ +-------+ +-------+
| | | temp1 | < | |
| | +-------+ | |
| A | | X |
| | | |
| | | |
+-------+ +-------+
在一个循环中,动态创建/调整温度图像,并从X复制更多的内容:
+-------+ +-------+ +-------+
| | | temp2 | < | |
| | | | | |
| A | +-------+ | X |
| | | |
| | | |
+-------+ +-------+
+-------+ +-------+ +-------+
| | | temp3 | < | |
| | | | | |
| A | | | | X |
| | +-------+ | |
| | | |
+-------+ +-------+
+-------+ +-------+ +-------+
| | | temp4 | < | |
| | | | | |
| A | | | | X |
| | | | | |
| | +-------+ | |
+-------+ +-------+
+-------+ +-------+ +-------+
| | | tempX | < | |
| | | | | |
| A | | | | X |
| | | | | |
| | | | | |
+-------+ +-------+ +-------+
我可以达到即时通讯使用UIViewContentModeTop即时通讯的效果。再次,这种效应在IB中看起来是正确的。但是当我在模拟器中运行时,图像始终显示为图像的实际尺寸(而不是我在IB中指定的尺寸)。 – AlvinfromDiaspar 2011-01-23 07:45:23
我对你的描述感到困惑。 1)你可以发布一些屏幕截图吗? 2)虽然在IB中有一组设置,但您的代码可能在运行时修改/覆盖了它们。 3)模拟器可能不准确,请尝试在真正的iPhone上进行测试。 – 2011-01-23 07:55:28
想象一下,在非常慢的连接上呈现网页。你基本上看到的页面是从上到下绘制的。基本上我想通过缓慢地将图像的高度从y = 0增加到y = 480来创建这种效果,其中图像是320x480图像(UIImage或UIImageView)。内容模式被定义为Top(以便图像边界被调整大小时,图像不会缩放)。 – AlvinfromDiaspar 2011-01-23 08:12:16