gpt4 book ai didi

ios - 没有 drawRect : 的 Live Xcode 的 Interface Builder UIView 子类 (IB_DESIGNABLE)

转载 作者:可可西里 更新时间:2023-11-01 05:28:43 24 4
gpt4 key购买 nike

是否可以创建一个 UIView 子类,在 Xcode 中实时呈现(通过添加 IB_DESIGNABLE 属性,如 here 所述),但没有自定义 drawRect: 方法?

我们有一个自定义的 UIView 子类,它使用一些 CAShapeLayer 添加到 self.layer 进行绘图(因此,不需要覆盖 drawRect:)。此类在 App 上运行良好,但无法在 Xcode 上呈现。

如果我们复制 drawRect: 中的代码,它可以工作,但我们更愿意让绘图在图层上自动发生。

这可以做到吗?


我也试过

- (void)drawRect:(CGRect)rect
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(currentContext, self.myLayer1.frame.origin.x, self.myLayer1.frame.origin.y);
[self.myLayer1 renderInContext:currentContext];
CGContextMoveToPoint(currentContext, self.myLayer1.frame.origin.x, self.myLayer1.frame.origin.y);
[self.myLayer2 renderInContext:currentContext];
}

这似乎在设备上有效,但在 Xcode 的 IB 上无效。

最佳答案

您可以在 IB 中预览 UIView 子类(使用 IB_DESIGNABLE 宏)即使 drawRect: 未被覆盖.
我加了你的 code在 XCode 6.1 中添加了一个 OEProgressIndicator 到一个 xib 文件中。然后我通过在 commonProgressIndicatorInit 选择器中设置断点来调试它(使用菜单 Editor/Debug Selected View )。

这就是您在当前代码的预览中看不到任何内容的原因:调用 commonProgressIndicatorInit 时(从 initWithFrame:( CGRect)frame 构造函数),frame 等于 CGRectZero(x:0 y:0 width:0 height:0 ) 这样您的中心变量实际上等于 (0, 0) 并且半径为 -1
在设备上,根据类的使用方式,您可能会直接使用适当的框架调用,这就是为什么它可能在设备上工作但在 IB 中不起作用的原因。

要解决此问题,我将实现 layoutSubviews选择器(从 UIView 覆盖它)以正确组织子层。当 frame 将从 CGRectZero 更改为在 Interface Builder 中设置的正确值时,将调用此选择器。

关于ios - 没有 drawRect : 的 Live Xcode 的 Interface Builder UIView 子类 (IB_DESIGNABLE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com