0

我是新手,找不到答案。在我的旧 4.x 应用程序中,我添加了实现我自己的 UIView 的文件,我在其中运行了一些“drawRect:(CGRect)rect”来绘制一些线条。例如...

/// DrawView.h
#import <UIKit/UIKit.h>
@interface DrawView : UIView <UINavigationControllerDelegate> {
...
}
-(void)DoSomething;
@end

然后,在我的视图控制器 .m 文件中,导入 DrawView.h 后,我可以这样做:

self.view = (DrawView *)self.view;
[(DrawView *)self.view DoSomething];

在我的 IOS4 东西中工作就像一个魅力。现在我尝试了一个使用故事板的 IOS5 应用程序,这个技巧不再有效。

第一行...

self.view = (DrawView *)self.view;

不会崩溃。但我没有在屏幕上看到任何绘画。期待 drawRect 显示一些东西。没有什么。所以我怀疑任务是否成功,或者某处隐藏了一些东西。

第二行...

[(DrawView *)self.view DoSomething];  

返回以下错误:

-[UIView DoSomething]:无法识别的选择器发送到实例 0x87631b0 sharedlibrary apply-load-rules all

节目接收信号 SIGABRT

我在某处读过drawRect(用于绘画)不能直接在视图控制器上运行,并且必须在UIView的单独实例化实现上运行。这就是我这样做的原因。但显然我为控制器的 self.view 分配自定义视图的旧技巧不再有效。

你知道怎么做吗?我的意思是,当使用故事板时?

谢谢

4

1 回答 1

0

我没有看到任何其他选择。所以我会发布这个作为答案。如果您知道任何内容,请随时发表评论或发布更好的替代方案...

DrawView *myView = [[[DrawView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease]; 
[self.view addSubview:myView]; 
[myView DoSomething];

在我的例子中,我实际上在 .h 文件中声明了 *myView,然后合成它,删除了“autorelease”,并释放了它。

于 2012-11-07T18:15:44.490 回答