我的代码到目前为止工作但我必须为UIView
创建一个类。这有点不方便,因为我也需要与ViewController进行交互。
顺便说一句,我确实在[self setNeedsDisplay]
子类文件的ViewDidLoad
上尝试UIViewController
,但它没有用。
这是代码,它适用于UIView
子类,但不会在UIViewController
上调用:
- (void)drawRect:(CGRect)rect
{
UIColor *currentColor = [UIColor redColor];
CGContextRef context = UIGraphicsGetCurrentContext();
someNum = 1;
CGContextBeginPath(context);
CGContextMoveToPoint(context, 30, 40);
[self addDotImageX:30 andY:40];
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextStrokePath(context);
}
关于尝试什么的任何想法?顺便说一句,这是一个TabBar应用程序。我知道那些可以以某种方式阻止对drawRect
的调用。
以编程方式创建的选项卡,而不是通过Nib。例如:
NSMutableArray *listOfViewControllers = [[NSMutableArray alloc] init];
UIViewController *vc;
vc = [[Education alloc] init];
vc.title = @"Education";
[listOfViewControllers addObject:vc];
vc.tabBarItem.image = [UIImage imageNamed:@"info.png"];
[vc release];
我很感激任何想法。我一直在浏览本网站上与setNeedsDisplay
没有打电话drawRect
相关的答案,但没有找到我特定案例的答案。
感谢。
答案 0 :(得分:10)
你正在混合两个班级。 UIViewController不是UIView,这意味着它不会从UIView继承。但好消息是它has a view, declared as property:它的构成。 drawRect方法仅在UIView类/子类中可用。
如果您想强制重绘控制器的视图,可以调用
[self.view setNeedsDisplay];
viewController中的。
您可以使用loadView方法将自己的自定义视图设置为viewController的视图。它看起来像这样:
- (void)loadView
{
MySubclassOfUIView *rootView = [[MySubclassOfUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// do more view configuration ...
self.view = rootView;
[rootView release];
}
因此,您可以将您的绘图代码分隔在MySubclassOFUIView.m文件中。
关于 UIViewController :
UIViewController类提供 基本的观点管理模式 适用于iPhone应用程序基础的 视图控制器类支持 呈现相关视图, 支持管理模态视图,以及 支持轮换视图作为响应 设备方向的变化。
UIView :
的目的UIView类定义了一个矩形 屏幕上的区域和界面 用于管理该区域的内容。 在运行时,视图对象处理 呈现其所在地区的任何内容 并且还处理与之的任何交互 那个内容。
在Apple官方文档中查看Cocoa Core Competencies / Model-View-Controller,它描述了MVC设计模式。
答案 1 :(得分:2)
你不能在UIViewController中覆盖drawRect
,因为UIViewController没有drawRect
方法。
据我所知,你正在制作一些自定义绘图,所以你可以将UIView子类化(尽管如果没有这样做可以得到相同的结果,那就更好了)。但是如果你想控制它的行为,那么你应该继承UIViewController。
确保您了解MVC的工作方式!
答案 2 :(得分:1)
在接口构建器中设置继承自UIViewController
的类的类
继承自UIView
的类,并且不会覆盖从-drawRect:
继承的类中的UIViewController
方法。在类中定义-drawRect:
方法,该方法已从UIView
。