2012-04-10 58 views
1

我与this guy有同样的问题,并且提供的解决方案无法解决它(也不清楚它在另一个SO问题中解决了它)。如何在drawRect中缩放自定义绘图:

当您更改.frame大小的UIView的,你没有改变默认.contentMode,那么可以肯定的是应该用的UIView的大小规模在drawRect(石英路径)的自定义绘制?我的不是。现在我可以拨打setNeedsDisplay并重新绘制,但我正在寻找可以制作动画的缩放。这可能吗?

相反,对我而言,发生的事情是Quartz绘图只是裁剪,但保持其大小。我试过直接设置contentMode以及clipsToBounds和其他实验,但是无论我尝试什么,Quartz都不会自动缩放。

回答

1

必须是别的事情Here's一个简单的演示我扔在一起来仔细检查contentMode是否按预期工作 - 当然,当contentMode设置为默认的“要填充的缩放比例”时,支持位图将向上/向下缩放/ 。并且在视图上调用setNeedsDisplay重新渲染图像。

你对视图做了些什么其他的事情? (你没有改变它的contentStretch属性,是吗?)你是否在做视图的任何事情?你检查过,视图上的contentMode真的是UIViewContentModeScaleToFill吗?此外,你是动画的视图本身,或超视图的框架?

+0

我已经下载了您的样品,但模拟器选项不可用它为我在Xcode,任何想法,为什么?我注意到你在动画之后是setNeedsDisplay。在做这件事之前它还没有扩展,或者你正在做这个重画,以便在动画之后做出更好的解析? – johnbakers 2012-04-11 05:54:03

+0

呃,这很奇怪。我在Xcode 4.3.2中使用5.1模拟器。您可以创建一个新的ipad项目并将其拖入..和它在动画中上下拖动。如果你注释掉了setNeedsDisplay调用,它的停留按照框架设置放大或缩小,但是如果它被放大了,它就会变得模糊和不稳定。 – davehayden 2012-04-11 06:07:53

+0

感谢您的帮助。我的问题似乎是我在setNeedsDisplay完成之前设置了自定义视图的框架,或者其他东西。不确定。我尝试了一段时间,以确保视图在缩放之前初始化,并确保它的工作。 – johnbakers 2012-04-11 06:13:02

0

,你可以尝试覆盖drawLayer

- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx 
{ 
    [super drawLayer:layer inContext:ctx]; 

    /*here to change self.frame 
     self.frame = CGRectMack(a, b, c, d); 
    */ 
}