无法使用drawRect将int传递给UIView

时间:2014-11-16 19:32:35

标签: ios objective-c uiview setneedsdisplay

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

我正在尝试绘制一个圆弧,并且每秒都在UIView上调用setNeedsDisplay,其中int提前一(秒)。当我调用NSLog(@"draw, %d",self.secs);

时,这似乎没有调用并保持(null)

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

draw.h

@property (nonatomic) int secs;

draw.m

@synthesize secs;

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

主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,而不是绘制

来修复它

1 个答案:

答案 0 :(得分: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];
}