-1

如何将 int 传递给使用 drawRect 使我成为圆弧的 UIView?

我正在尝试绘制一个圆弧,并且每秒调用 UIView 上的 setNeedsDisplay ,并将 int 提前一(秒)。当我打电话时,这似乎没有打电话并保持(空)NSLog(@"draw, %d",self.secs);

基本上我的代码日志每秒只读取“draw 1”,然后是“draw 0”。

绘制.h

@property (nonatomic) int secs;

绘图.m

@synthesize secs;

- (void)drawRect:(CGRect)rect
{
    NSLog(@"draw, %d",self.secs);
    //stuff with using this value   
}
@end

main VC.m - NSTimer 调用它,但 tick.secs 似乎每次都是 0

draw *tick = [[draw alloc] init];
tick.secs = tick.secs+1;
NSLog(@"draw, %d",tick.secs);
[self.drawView setNeedsDisplay];

编辑1:

Stonz2 非常正确,我应该使用一个实例draw- 这已经解决了我的一半问题。现在在我的主 VC.m 中,tick.secs每秒都在增加,但在 draw.m 中,drawRect 仍然认为secs每秒为 0

编辑 2:Sha 通过使用 UIView 观察我的 IBOutlet 来修复它,而不是绘制

4

1 回答 1

2

问题是draw每次运行定时方法时都会创建一个新对象。draw如果要维护对象的属性,则需要保持对对象的相同引用。

考虑在主 VC.m 文件中创建一个实例draw对象,而不是每次运行定时方法时都创建一个新对象。

例子:

@implementation mainVC
{
    draw *tick;
}

...

- (void)startTimer
{
    tick = [[draw alloc] init];
    tick.secs = 0;
    // start your timer here
}

- (void)timerIncrement
{
    // do NOT alloc/init your draw object again here.
    tick.secs += 1;
    [self.drawView setNeedsDisplay];
}
于 2014-11-16T19:39:22.053 回答