加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 没有drawRect的Live Xcode的Interface Builder UIView子

发布时间:2020-12-14 17:51:08 所属栏目:百科 来源:网络整理
导读:是否可以创建一个UIView子类,它在 Xcode中呈现(通过添加IB_DESIGNABLE属性,如 here所述),但没有自定义drawRect:方法? 我们有一个自定义的UIView子类,它使用一些CAShapeLayers,它们被添加到self.layer中进行绘制(因此,不需要覆盖drawRect :).这个类在App上
是否可以创建一个UIView子类,它在 Xcode中呈现(通过添加IB_DESIGNABLE属性,如 here所述),但没有自定义drawRect:方法?

我们有一个自定义的UIView子类,它使用一些CAShapeLayers,它们被添加到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.y);
    [self.myLayer2 renderInContext:currentContext];    
}

这似乎适用于设备,但不适用于Xcode的IB.

解决方法

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

这就是为什么在预览中看不到当前代码的原因:当调用commonProgressIndicatorInit时(来自initWithFrame:(CGRect)框架构造函数),框架等于CGRectZero(x:0 y:0 width:0 height) :0)这样你的中心变量实际上等于(0,0),半径是-1.
在设备上,根据类的使用方式,可以使用正确的框架直接调用,这就是它可以在设备上工作而不在IB中工作的原因.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读