如何在UIImageView实例中绘制一个点?

时间:2009-08-18 00:53:31

标签: iphone graphics uikit core-animation core-graphics

如何使用Core Graphics绘制实例化的UIImageView内部(没有类文件覆盖drawrect with - 只是对实例的引用)?我想绘制一个固定宽度(例如,10像素直径)和某种颜色的简单点

2 个答案:

答案 0 :(得分:1)

  

如何使用Core Graphics ...绘制一个固定宽度的简单点(例如,10像素直径)和某种颜色[?]

  1. Set the fill color.
  2. Move to the point.
  3. Plot an arc,以该点为中心,具有所需的半径,开始角度为0,结束角度为2 * M_PI
  4. Close the path.
  5. Fill.
  6.   

    ...在实例化的UIImageView中绘制(没有类文件覆盖drawrect with - 只是对实例的引用)

    我知道在Mac上,这真的不是一个好主意,因为如果有任何东西将其设置为需要显示(或直接告诉显示),NSView可能会随时重绘,然后会破坏任何你想要的东西吸引它。不知道iPhone,但我注意到UIView没有NSView的lockFocusunlockFocus等方法。

    更多的建筑理由没有这样做:绘图是视图的专属领域,你建议打破这种排他性,并在(我假设)控制器中撒上一些绘图代码。在没有这个目的的对象中为某个目的分散代码是一条凌乱,无法使用的代码的路径。

    最好为每个点创建子视图并将其添加为图像视图或子类UIImageView的子视图,为该子类的实例提供要绘制的点数组,并让子类的drawRect:调用在绘制积分之前到super

    然后,上述解决方案进入drawRect:

答案 1 :(得分:1)

您还可以将核心动画图层添加到视图中。将圆角半径设置为所需点的一半(假设为正方形),它将呈现为圆形。类似的东西:

CALayer *layer = [CALayer layer];
[layer setBounds:CGRectMake(0.0f, 0.0f, 10.0f, 1.0f)];
[layer setCornerRadius:5.0f];
[layer setMasksToBounds:YES];
[layer setBackgroundColor:[[UIColor redColor] CGColor]];

// Center the layer in the view.
[layer setPosition:CGPointMake([view bounds].size.width/2, 
                            [view bounds].size.height/2)];

// Add the layer to your view
[[view layer] addSublayer:layer];

不是核心图形,但它很容易实现。

最诚挚的问候,