我是obj C的菜鸟,我觉得我做的一切都是正确的,所以请不要因此而讨厌我;)...我试图创建一个自定义类,在视图控制器上绘制一个矩形。
到目前为止,我已经用一个简单的代码创建了一个名为'Planet'的类。然后我将Planet类(自定义类选项卡)添加到故事板上的视图控制器。我没有错,但我也没有矩形。
Planet.h
#import <UIKit/UIKit.h>
@interface Planet : UIViewController
@end
Planet.m
#import "Planet.h"
@implementation Planet
-(void) drawRect:(CGRect)rect{
CGRect rectangle = CGRectMake(0, 100, 320, 100);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextFillRect(context, rectangle);
}
@end
我的视图控制器的一个屏幕调用Planet类。
...输出
答案 0 :(得分:3)
UIView
有drawRect
方法。不是UIViewController
。
UIViewController
和UIView
都是UIResponder
的子类。 UIViewController
不是UIView
的子类。
并且UIView
单独有drawRect方法。如果你在UIViewController中编写drawRect,它只是认为它是用户定义的函数而不会调用它。
如果您仍有疑问,在该drawRect函数中放置一个断点,看看它是否被调用。
答案 1 :(得分:0)
不是将Planet作为UIViewController
的子类,而是将其作为UIView
的子类。将一个Planet实例添加到视图控制器的视图中,可以使用viewWillAppear
方法,例如:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
Planet *myPlanet = [[Planet alloc] initWithFrame:self.view.frame];
[self.view addSubview:myPlanet];
}
答案 2 :(得分:0)
要解决此问题,只需将故事板中的类从Planet更改为之前的类。将UIView拖到视图控制器并将该视图的类更改为Planet。
你应该避免覆盖drawRect:如果你不需要它,因为它非常昂贵。 相反,你应该使用Layer。您可以使用CALayer绘制矩形:
// Remember to import QuartzCore.h framework
#import <QuartzCore/QuartzCore.h>
CALayer *myLayer = [CALayer layer];
myRect = CGRectMake(0.0f, 0.0f, 150.0f, 200.0f);
[myLayer setBounds:myRect];
[myLayer setBackgroundColor:[[UIColor blackColor] CGColor]];
[myLayer setBorderColor:[[UIColor clearColor] CGColor]];
[myLayer setBorderWidth:1.0f];
//You can change radius
[myLayer setCornerRadius:15.0];
[self.layer addSublayer:myLayer];
它比drawRect便宜得多:。
答案 3 :(得分:0)
使用
[self.view setNeedsDisplay];
在视图中会出现添加子视图为星球(UIView)。