objective-c - cocoa-不知道drawRect:为什么调用?
PHP中文网
PHP中文网 2017-05-02 09:22:19
0
1
388

在学习别人的代码,准备写一个状态栏应用。
AppDelegate里出现了这段代码

- (void)setStatusImageAndToolTip:(enum InfoStatus)status {
    NSString *name = [nameArray objectAtIndex:status];
    NSString *toolTip = [toolTipArray objectAtIndex:status];
    NSImage *image = [NSImage imageNamed:name];
    CGFloat length = image.size.width / image.size.height * statusBarHeight * 0.8;
    [image setSize:NSMakeSize(length, statusBarHeight * 0.8)];
    statusView.image = image;
    statusView.alternateImage = image;
    [statusView.alternateImage setTemplate:YES];
    statusItem.length = length;  //此处调用drawRect
    statusView.toolTip = toolTip;
}

这段代码是在observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context函数里调用的。在当状态变量status改变后,调用setStatusImageAndToolTip函数。
由于我自己的项目里并没有用到状态改变,就没有写这部分代码。但是导致了在运行时不执行drawRect:函数,所以在状态栏没有显示图标。
回头研究代码时,发现drawRect是在statusItem.length赋值时调用的。不知道为什么?

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
阿神

Dalam dokumentasi rasmi:

Jika anda hanya menukar geometri pandangan, paparan biasanya
tidak dilukis semula.

Masa panggilan drawRect ditentukan oleh sistem (apabila ia dipaparkan buat kali pertama, dsb.), yang bermaksud drawRect tidak akan dipanggil oleh sistem dalam beberapa kes.
Gunakan kaedah berikut untuk memaksa drawRect dipanggil untuk mengemas kini paparan dalam kitaran lukis semula seterusnya

  • setNeedsDisplay

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan