【问题标题】:About drawing using quartz 2D on iPhone关于在 iPhone 上使用石英 2D 绘图
【发布时间】:2010-04-06 14:25:34
【问题描述】:

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

- (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];
}

我的 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;

【问题讨论】:

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


    【解决方案1】:

    不要在绘图矩形内初始化命令。在创建视图时在某处初始化默认值(可能在 viewDidLoad 中?这取决于您在做什么),然后在需要时动态更新它们,但是您正在执行此操作。所以:

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

    和其他地方:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多