-1

drawRect を使用して円弧を作成する UIView に int を渡すにはどうすればよいですか?

円弧を描画しようとしていますが、毎秒、UIView で setNeedsDisplay を呼び出し、int を 1 (秒) 進めます。これは呼び出しているようには見えず、呼び出しても (null) のままですNSLog(@"draw, %d",self.secs);

基本的に、私のコードログは毎秒「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

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 は依然として毎秒secs0 であると考えています

EDIT 2: Sha は、描画ではなく、UIView を使用して IBOutlet を観察して修正しました

4

1 に答える 1

2

draw問題は、時限メソッドを実行するたびに新しいオブジェクトを作成していることです。drawプロパティを維持したい場合は、オブジェクトへの同じ参照を保持する必要があります。

draw時間指定メソッドを実行するたびに新しいインスタンス オブジェクトを作成するのではなく、メインの VC.m ファイルにインスタンス オブジェクトを作成することを検討してください。

例:

@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 に答える