【发布时间】:2011-04-25 01:31:51
【问题描述】:
iPhone 开发问题:
我想画一个四边形,四边形的四个黑角(CGPoint)是可变的。
我覆盖了drawRect 方法,但它只显示矩形而不是四边形。这是否意味着drawRect 只能绘制具有四个 CGPoints 的矩形?
最初的要求是通过触摸和移动任意角点来改变四边形的形状。我可以通过覆盖 drawRect 来解决这个问题吗?我应该做点别的吗?
谢谢。
【问题讨论】:
iPhone 开发问题:
我想画一个四边形,四边形的四个黑角(CGPoint)是可变的。
我覆盖了drawRect 方法,但它只显示矩形而不是四边形。这是否意味着drawRect 只能绘制具有四个 CGPoints 的矩形?
最初的要求是通过触摸和移动任意角点来改变四边形的形状。我可以通过覆盖 drawRect 来解决这个问题吗?我应该做点别的吗?
谢谢。
【问题讨论】:
-drawRect: 是您放置绘图代码的位置,该代码几乎可以绘制您想要的任何东西。你当然不限于矩形。我不确定我是否遵循您问题的特殊性质-如果您发布一些代码会很有帮助。一般来说,-drawRect: 是放置绘图代码的正确位置,如果您的视图没有按照您想要的方式绘制,很可能是由于代码中的问题而不是 -drawRect: 方法的限制。
【讨论】:
具体来说,您的视图框架定义了它的origin{x,y} 和size{width,height}。
这是一个简单的矩形。
同样,为绘图参数传递了一个矩形。
要让您的视图表示比矩形更复杂的四边形,您必须编写一些自定义几何转换(除非函数已经存在)。有许多 api 可以缓解这种情况(例如 NSBezierPath/UIBezierPath)。
最终,您需要一个足够大的框架来容纳整个四边形。当被要求绘制它的一部分时,您决定绘制什么以及如何填充它。
由于您希望矩形内有 4 个可移动点,因此您必须定义 4 个点(例如 CGPoint)——每个角一个。使这些 ivars 成为您视图的子类。当它们发生变化时,适当地使视图无效。
【讨论】: