我有一个非常简单的UIView
,它只绘制一个三角形。它实现了一个绘制图形的UIView drawRect
方法。它在iOS7上工作正常,但是当我在iOS8上运行相同的代码时,它甚至都没有被调用。任何想法在iOS8上发生了什么变化?我的代码简而言之:
@interface MyView : UIView
@end
@implementation MyView
- (instancetype)init {
self = [super init];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)drawRect:(CGRect)rect {
// draw things
}
@end
myView = [MyView new];
[self addSubview:myView];
更新
我的视图层次结构:UIViewController View->Custom UILabel->MyView
这是一个错误的消息泡泡,我的观点是指向某个东西的喙。
我使用过新的UI调试工具,但在那里看不见。调用Init方法,drawRect
不是。 iOS8中的某些内容必须已更改,因为iOS7正在调用drawRect
。
更新2
当然我正在使用约束(和Masonry
pod),这就是我没有指定框架的原因。
[myView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(make.superview.mas_bottom);
make.centerX.equalTo(make.superview);
make.width.equalTo(@10.0f);
make.height.equalTo(@5.0f);
}];
我也尝试在各个地方添加[myView setNeedsDisplay]
,但它没有帮助。
答案 0 :(得分:2)
问题终于解决了。我不确定究竟是什么导致了这个问题(Masonry
[约束框架]或iOS8更改为UILabel
),但解决方案是更改视图层次结构。我创建了另一个UIView
,其中包含UILabel
和我的UIView
(绘制的喙),而不是将UIView
添加到UILabel
作为子视图。现在,在iOS7和iOS8上调用drawRect
方法。
以前的层次结构:
UIViewController View->Custom UILabel->MyView
新层次结构:
UIViewController View->Container UIView->Custom UILabel & MyView
总而言之,如果您的drawRect
方法未在iOS8上调用,并且您要将一些UIView
添加到UILabel
作为子视图,请尝试使用一个包含两个UIView
的容器{1}}和UILabel
。
答案 1 :(得分:0)
您的方法中缺少重要细节。您需要指定一个框架来确定视图的原点和大小。这可以使用initWithRect
的{{1}}方法完成,也可以在分配/初始化后设置帧。由于您已经有自定义UIView
方法,因此我会执行以下操作:
init
这将绘制您的自定义视图,其原点为(0.0,0.0),宽度和高度为100.0。
此外,如果您仍遇到问题,添加对myView = [MyView new];
myView.frame = CGRectMake(0.0,0.0,100.0,100.0);
[self addSubview:myView];
的调用应强制调用setNeedsDisplay
方法:
drawRect
答案 2 :(得分:0)
确保myView
的超级视图属性clipToBounds = NO
,myView
矩形在屏幕上