问题描述
- iPhone,不知道为啥视图变成黑色的
-
视图变成了一个黑色的矩形,下面是画视图的代码:- (void)drawRect:(CGRect)rect { //// General Declarations CGContextRef context = UIGraphicsGetCurrentContext(); //// Color Declarations UIColor* color3 = [UIColor colorWithRed: 0.102 green: 0.737 blue: 0.612 alpha: 1]; UIColor* buttonStrokeColor = [UIColor colorWithRed: 0.925 green: 0.941 blue: 0.945 alpha: 0.004]; //// Image Declarations UIImage* image = [UIImage imageNamed: @"image"]; UIColor* imagePattern = [UIColor colorWithPatternImage: image]; //// Group 2 { //// AddButton Drawing UIBezierPath* addButtonPath = [UIBezierPath bezierPathWithRect: CGRectMake(280.0, 3.0, 30, 30)]; [color3 setFill]; [addButtonPath fill]; [buttonStrokeColor setStroke]; addButtonPath.lineWidth = 1; [addButtonPath stroke]; //// Group { //// Rectangle Drawing UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(280.0, 3.0, 30.0, 30.0)]; CGContextSaveGState(context); CGContextSetPatternPhase(context, CGSizeMake(86, 33)); [imagePattern setFill]; [rectanglePath fill]; CGContextRestoreGState(context); [buttonStrokeColor setStroke]; rectanglePath.lineWidth = 1; [rectanglePath stroke]; } }
不知道为什么变成黑盒子了?
解决方案
可能是你绘制时超出了视图本身的边框。绘制时不能根据视图的框架画,要根据视图的边界画。
更新贝塞尔曲线的起始应该是0.0。
并且在运行时要根据视图的尺寸进行编码。
解决方案二:
在使用UIBezierPath 画图之前,先设置绘制图形的颜色。
[[UIColor blueColor] set];
UIBezierPath *path=........
再者,你在绘图的上下文Context中多次设置了颜色,最先设置的颜色会影响到绘制的图形的颜色。所以建议在必要的地方使用
CGContextSaveGState(context) 与 CGContextRestoreGState(context) 配合使用。
时间: 2025-01-19 08:39:20