在 UIView 子类的子视图内绘图

Posted

技术标签:

【中文标题】在 UIView 子类的子视图内绘图【英文标题】:Drawing inside a subview of a UIView subclass 【发布时间】:2013-10-23 11:45:12 【问题描述】:

我有更多一般性的问题。我有一个子类UIView 的自定义类。我覆盖“-drawRect”以在我成功完成的线上绘制点。现在我在我的类中声明另一个我想要动画的 UIView 对象。它应该是一个白色的圆圈轮廓,我想用动画移动它,这就是为什么我希望它是UIView 类型。但是我怎么能在里面画呢?例如,如果我有 3 个其他类似情况怎么办?所以我的意思是,我想将所有功能保留在组件的类中,并为一个或多个UIView 子视图定制绘图。我想我在概念层面上遗漏了一些东西。

在 ActionScript 3 中我会这样做:

var first:MovieClip = new MovieClip();   
first.graphics...
......
var nTh:MovieClip = new MovieClip();
nTh.graphics...

这就是我想要实现的(正如我所说,我已经在-drawRect 内绘制了圆点,现在我想制作更大的圆圈,稍后必须对其进行动画处理):

【问题讨论】:

你可以尝试将绘图代码放在一个动画块中 [UIView animationWithDuration:0.25 animations^ // 在这里绘制代码];我不知道这是否可行,但它可能会帮助你 【参考方案1】:

经过几天的挣扎和几周没有使用笔记本电脑后,我决定回来向您展示我是如何解决我的问题的。如果这对某人有帮助,我会很高兴。 它似乎是一个非常简单的解决方案,甚至无需使用 -drawRect。我所做的是创建一个 UIView 实例并在 -initWithFrame 中设置它的边界和位置:

//circleFrameSideSize will serve as the diameter of the circle
UIView *circle = [[UIView alloc] initWithFrame:CGRectMake(0, circleYPos, circleFrameSideSize, circleFrameSideSize)];
circle.layer.borderColor = [UIColor whiteColor].CGColor;
circle.layer.borderWidth = 1;
//here we do the trick for making the circle with using layer's corner radius
circle.layer.cornerRadius = circleFrameSideSize/2;
[self addSubview:circle];

原来如此。每次需要矩形或圆形等图形时,我都会使用这种方法。

PS:我不明白为什么我对我苦苦挣扎了这么久的事情投了反对票,并给出了很好的描述..

【讨论】:

以上是关于在 UIView 子类的子视图内绘图的主要内容,如果未能解决你的问题,请参考以下文章

没有子类化的重载方法(特别是drawRect:)

UIScrollView 中的 UIView 子类如何处理内存

以编程方式在子类 UIView 的子视图上自动布局

使用动态大小的子视图调整 UIView 子类的大小

清除绘图的UIView?

为子视图的子视图设置框架