2013-02-05 32 views
1

我正在开发一个涉及在屏幕上绘制小图形(线条和路径)的iOS项目。在小图形项目中使用Quartz

我最初选择使用Quartz而不是OpenGL,因为我需要显示一些基本的形状,并且我需要每5秒更新一次,所以我认为Quartz更好更容易。

我发现我不能简单地在视图中绘制,但我必须继承一个UIView并在drawRect方法中绘制。

在我的项目中,用户应该能够捏和缩放图形,所以我计划添加一个pinchgesture到视图,但我怀疑如何重新绘制捏之后的一切。是否必须清除所有内容并重新添加子视图,以便drawRect触发,还是有更好的方法来执行此操作?

非常感谢。

+0

不是一个可能的答案,但检查这个http://blog.teamtreehouse.com/creating-a-fun-iphone-app-called-bearded-part-1 – Joseph

回答

1

当使用Quartz时,你在技术上不要子类化视图并替换drawRect,但它可能是最佳实践。当您想重新绘制窗口时,只需拨打[self setNeedsDisplay];(如果从子类别视图中调用,或者如果从视图控制器中调用[self.view setNeedsDisplay];)。这将导致您打电话给您的drawRect方法,它会为您处理所有事情。

有关更多信息,请参阅setNeedsDisplay文档。

+0

所以你的意思是,例如我改变我的绘图变量为新的值,然后触发setNeedsDisplay,对不对? – GavynSykes

+0

@GavynSykes - 是的。查看http://stackoverflow.com/a/14203167/1271826中的第二个代码示例,了解将手势与“setNeedsDisplay”组合的示例。请注意,这是做一些与你略有不同的事情(这是动画从手势开始到手势结束的一条线的绘制),但它说明了(a)手势和Quartz的集成; (b)在touchesMoved和touchesEnded中调用'setNeedsDisplay'的正确时间;和(c)展示了你在视图控制器中使用它或使用子类“UIView”的区别。 – Rob