当覆盖drawRect时,UIView内容模式的行为有所不同:

时间:2016-10-27 04:55:40

标签: ios objective-c iphone uiview

我正在学习iOS。我一直在阅读Apple的View编程指南。 我做了以下尝试内容模式:

  • 我将uiview拖入故事板并将其设为我的CustomView类。
  • 然后我将内容模式更改为,并将背景颜色设置为粉红色。
  • 然后有一个按钮,只需将自定义视图的宽度和高度更改为1.5倍。

现在,我发现了一件有趣的事情:

我运行它,然后单击按钮,然后:

  • 案例1:如果我覆盖了draw rect方法

drawRect: overrided

然后视图的外观向下移动

大小实际上增加了

在网上进行一些搜索并查看Apple的文档之后,除了一个问题之外我无法解决这个问题,这可能与drawLayer有关:inContext:如果覆盖drawRect则表现不同:

有谁知道这里发生了什么?

(抱歉格式化,这是一个新帐户,我无法发布超过2个链接。)

CODE: 对于CustomView,只需覆盖drawRect或不覆盖它。

#import "CustomView.h"
@implementation CustomView
- (void)drawRect:(CGRect)rect{
//Do nothing, for case 2 i just commented out this method.
}
@end

用于更改customView的框架:

- (IBAction)changeBound:(id)sender {
    self.customView.frame = CGRectMake(self.customView.frame.origin.x, self.customView.frame.origin.y, self.customView.frame.size.width * 1.5, self.customView.frame.size.height * 1.5);
}

1 个答案:

答案 0 :(得分:1)

在做了一些研究后,我想我弄清楚发生了什么:

因此,绘制背景代码实际上是在-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context中单独处理的。这就是空drawRect的原因,它仍然是背景。另外,根据drawRect的存在与否(可能通过调用respondsToSelector?),UIView在drawLayer :inContext中表现不同。 见Dennis Fan's answer in this link