我创建了一个名为Status的UIView子类,用于显示特定大小的矩形(在视图中),具体取决于变量的值。
// Interface
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
@interface Status: UIView {
NSString* name;
int someVariable;
}
@property int someVariable;
@property (assign) NSString *name;
- (void) createStatus: (NSString*)withName;
- (void) drawRect:(CGRect)rect;
@end
// Implementation
#import "Status.h"
@implementation Status
@synthesize name, someVariable;
- (void) createStatus: (NSString*)withName {
name = withName;
someVariable = 10000;
}
- (void) drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
//Draw Status
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1); // fill
CGContextFillRect(context, CGRectMake(0.0, 0.0, someVariable, 40.0));
}
//// myviewcontroller implementation
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
myStatus = [[Status alloc] initWithFrame:CGRectMake(8,8,200,56)];
myStatus.backgroundColor = [UIColor grayColor];
[self.view addSubview:myStatus];
}
如何设置它以便我可以反复调用状态栏的刷新?我可能会使用NSTimer每秒调用4次刷新,我只是不确定要调用什么,或者我是否应该将此矩形绘图移动到单独的函数或其他内容...
提前感谢您的帮助:)
答案 0 :(得分:1)
只需使用
[self.view setNeedsDisplay];
来自您的视图控制器的。您可能希望在主线程上实现此目的,因此可以使用performSelectorOnMainThread:withObject:waitUntilDone:
如果您需要指定,还有setNeedsDisplayInRect:
。但是您的代码是轻量级且快速的,您可能需要对更新的区域进行计算以计算包含的rect。所以我只是更新整个UIView,如果它似乎没有显着减慢您的应用程序。
作为旁注,您可能想要创建您的名称属性(副本),因此它不会在您的脚下发生变化(并在createSatus中使用self.name = ...
来使用属性访问器。在这种情况下,请别忘了在dealloc中发布它。
我建议不要在视图控制器中调用setNeedsDisplay:,只要属性发生变化,我就建议在视图中调用它。