关于在iPhone上使用石英2D绘图

时间:2010-04-06 14:25:35

标签: objective-c iphone-sdk-3.0 quartz-graphics

我有一个视图,有一个drawRect方法,我知道这个方法是我控制View在其上绘制内容的唯一方法。所以,我以这种方式尝试绘制逻辑:

- (void)drawRect:(CGRect)rect {

  //my drawing code...
}

在我看来,我使用IB来链接这个类。

[myView setNeedsDisplay];

它有效,所以,我设计在drawRect方法中有一个Command对象,这样我就可以根据我的Cmd动态绘制。以下是我修改后的视图中的代码:

- (void)drawRect:(CGRect)rect {
    self.cmdToBeExecuted = [[DrawingSomethingCmd alloc] init];
    [self.cmdToBeExecuted execute];
}

My DrawingsomthingCmd:

@implementation DrawingSomethingCmd
-(void)execute{
//my drawing code;
}

它也有效。但问题是,如何动态分配self.cmdToBeExecuted。 另外,我改变了我的drawRect:

  - (void)drawRect:(CGRect)rect {
    [self.cmdToBeExecuted execute];
  }

因为我有这个与IB联系,

IBOutlet myDrawingView *myView;

但在我输入[myView ... ...]后,它不允许我获取变量cmdToBeExecuted。我准备好在.h:

中访问我的变量
@property (nonatomic, retain) Command *cmdToBeExecuted;

和.m也是:

@synthesize cmdToBeExecuted;

1 个答案:

答案 0 :(得分:1)

不要在绘图rect内初始化命令。在创建视图时初始化默认值(可能在viewDidLoad中,这取决于您正在做什么),然后在需要时动态更新它们。所以:

- (void)drawRect:(CGRect)rect
{
  [[self commandToBeExecuted] execute];
}

和其他地方:

// dynamically update the drawing
[myView setCommandToBeExected:[[[DrawingSomethingCommand alloc] init] autorelease]];