我有一个BoardViewController (UIViewController),需要在其背景中绘制居中的坐标线。对于这些坐标线,我创建了一个自定义 UIView 类CoordinateView,它被添加为 subView。即使更改设备方向,坐标视图也应居中并填充整个屏幕。
为此,我想使用代码中实现的自动布局。这是我当前的设置:
在CoordinatesView (UIView) 类中自定义绘制坐标线的方法
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetLineWidth(context, 1.0);
CGContextMoveToPoint(context, self.bounds.size.width/2,0);
CGContextAddLineToPoint(context, self.bounds.size.width/2,self.bounds.size.height);
CGContextStrokePath(context);
CGContextMoveToPoint(context, 0,self.bounds.size.height/2);
CGContextAddLineToPoint(context, self.bounds.size.width,self.bounds.size.height/2);
CGContextStrokePath(context);
}
在BoardViewController中初始化这个坐标视图对象
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
...
coordinatesView = [[CoordinatesView alloc]initWithFrame:self.view.frame];
[coordinatesView setBackgroundColor:[UIColor redColor]];
[coordinatesView clipsToBounds];
[coordinatesView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:coordinatesView];
[self.view sendSubviewToBack:coordinatesView];
...
}
在 BoardViewController 的viewWillAppear函数中为坐标视图添加自动布局魔法
-(void)viewWillAppear:(BOOL)animated{
...
NSLayoutConstraint *constraintCoordinatesCenterX =[NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:coordinatesView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:1];
NSLayoutConstraint *constraintCoordinatesCenterY =[NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:coordinatesView
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:1];
[self.view addConstraint: constraintCoordinatesCenterX];
[self.view addConstraint: constraintCoordinatesCenterY];
...
}
注意:这种方法对我使用 UIImageView 图像作为坐标有效,但不适用于自定义 UIView 坐标视图。
我怎样才能让它再次工作?一旦我应用自动布局/NSLayoutConstraint,我的坐标视图 UIView 似乎消失了
这实际上是向 UIViewController 添加背景绘图的好方法,还是直接绘制到 UIViewController 中更好。(如果是这样,那会是什么样子?)
感谢您对此的帮助。