Objective-C肋骨绘图与绘图:(CGContextRef*)上下文
我有一个家庭作业,我们的教授告诉我们让圆、正方形和三角形符合一个叫做Objective-C肋骨绘图与绘图:(CGContextRef*)上下文,objective-c,cocoa-touch,Objective C,Cocoa Touch,我有一个家庭作业,我们的教授告诉我们让圆、正方形和三角形符合一个叫做 Shape.h: #import <Foundation/Foundation.h> @protocol Shape <NSObject> @required - (void)draw:(CGContextRef) context; - (float)area; @end @interface MyRect : UIView <Shape> 其中myView是我拖到.xib上的UI
Shape.h
:
#import <Foundation/Foundation.h>
@protocol Shape <NSObject>
@required
- (void)draw:(CGContextRef) context;
- (float)area;
@end
@interface MyRect : UIView <Shape>
其中myView
是我拖到.xib上的UIView
并在MyRect
类中执行绘制
MyRect.h
:
#import <Foundation/Foundation.h>
@protocol Shape <NSObject>
@required
- (void)draw:(CGContextRef) context;
- (float)area;
@end
@interface MyRect : UIView <Shape>
但后来我发现了一个错误:
[...] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
[...] <Error>: CGContextAddRect: invalid context 0x0
[...] <Error>: CGContextFillRects: invalid context 0x0
[…]:CGContextSetFillColorWithColor:无效上下文0x0
[…]:CGContextAddRect:无效的上下文0x0
[…]:CGContextFillRects:无效的上下文0x0
我猜它来自[rectView-draw:UIGraphicsGetCurrentContext()]代码>
你知道怎么解决这个问题吗
谢谢 UIGraphicsGetCurrentContext()将返回nil,drawRect中除外:。UIKit将在drawRect之前创建上下文:
也可以创建自己的上下文进行绘制
UIKit示例:
UIGraphicsBeginImageContext()
UIGraphicsGetImageFromCurrentImageContext() to get image context
UIGraphicsEndImageContext()
核心图形示例:
CGBitmapContextCreate()
文件:
UIGraphicsGetCurrentContext()将返回nil,drawRect中除外:。UIKit将在drawRect之前创建上下文:
也可以创建自己的上下文进行绘制
UIKit示例:
UIGraphicsBeginImageContext()
UIGraphicsGetImageFromCurrentImageContext() to get image context
UIGraphicsEndImageContext()
核心图形示例:
CGBitmapContextCreate()
文件:
首先要覆盖MyRect类中的-drawRect:
方法。
然后使用
[[UIColor greenColor] set] // or setStroke, 'cause your using stroke and not fill!
CGContextStrokeRect(UIGraphicsGetCurrentContext(), rect)
您应该使用-drawRect:
并在UIView子类中生成所有图形。您可以而不是从您想要的位置获取上下文。仅在命名的方法中。首先要覆盖MyRect类中的-drawRect:
方法。
然后使用
[[UIColor greenColor] set] // or setStroke, 'cause your using stroke and not fill!
CGContextStrokeRect(UIGraphicsGetCurrentContext(), rect)
您应该使用-drawRect:
并在UIView子类中生成所有图形。您可以而不是从您想要的位置获取上下文。仅在指定的方法中。谢谢,但不确定我们的教授是否故意这么做(他经常出错…),他要求我们改写-(void)draw:(CGContextRef)context
如果丢弃我的代码,您认为您能做些什么来解决这个问题?UIKit中没有-draw:
方法。您可以使用CALayer委托并覆盖CALayers-drawInContext:
方法,但只有当您想为rect设置动画时才需要此方法。要解决此问题,您只需将上面的代码放入命名的-drawinRect:
方法中即可。它将被自动调用,您不必调用“[rectView drawRect:]或其他什么。不需要更多的魔法;)我已经测试过了,它很有效。。但我不认为我会得到分数,因为他要求我们使用委托来确认Shape.h
并绘制矩形等等。。由于draw:
是一项要求,我假设他希望我们使用该方法来绘制……我不太确定这如何工作,因为视图上下文仅在该方法中可用。你可以很容易地使用BOOL来确认它是否应该绘制。在自定义的-draw
方法中,执行以下操作:shouldDraw=YES;[自我设置需要显示];shouldDraw=否代码>这将迫使您重新绘制视图。谢谢,但不确定我们的教授是否故意这样做(他经常出错…),他要求我们覆盖-(void)draw:(CGContextRef)context
如果丢弃我的代码,您认为您能做些什么来解决这个问题?UIKit中没有-draw:
方法。您可以使用CALayer委托并覆盖CALayers-drawInContext:
方法,但只有当您想为rect设置动画时才需要此方法。要解决此问题,您只需将上面的代码放入命名的-drawinRect:
方法中即可。它将被自动调用,您不必调用“[rectView drawRect:]或其他什么。不需要更多的魔法;)我已经测试过了,它很有效。。但我不认为我会得到分数,因为他要求我们使用委托来确认Shape.h
并绘制矩形等等。。由于draw:
是一项要求,我假设他希望我们使用该方法来绘制……我不太确定这如何工作,因为视图上下文仅在该方法中可用。你可以很容易地使用BOOL来确认它是否应该绘制。在自定义的-draw
方法中,执行以下操作:shouldDraw=YES;[自我设置需要显示];shouldDraw=否代码>这将迫使您的视图重新绘制。感谢您的快速回复!我正在阅读文档和措辞,如果我希望它是UIView
的大小(myView),我如何获得CGSize
?感谢您的快速回复!我正在阅读文档和措辞,如果我希望它是UIView
的大小(myView),我如何获得CGSize
?