UIViewDrawRectBlock 0.0.1

UIViewDrawRectBlock 0.0.1

测试已测试
语言语言 Objective-CObjective C
许可证 MIT
发布日期最后发布日期2014年12月

未声明的拥有者维护。



  • Hans Sjunnesson

UIView+DrawRectBlock

厌倦了仅为了实现drawRect就使用子类化UIView?

这是一个UIView的分类,可用于创建具有drawRect块的实例。

如何使用此函数?

类似于这样

- (void)viewDidLoad {
    [self.view addSubview:[UIView viewWithFrame:CGRectMake(20, 40, 60, 60)
                                  drawRectBlock:^(CGRect rect) {
                                      CGContextRef c = UIGraphicsGetCurrentContext();
                                      CGContextSetFillColorWithColor(c, [UIColor blueColor].CGColor);
                                      CGContextFillRect(c, rect);
                                  }]];
}

但是,当然,始终要小心使用 blocks。这种设置会让创建循环引用链变得非常容易。比如说,您想访问视图控制器上的一个属性,比如那个颜色,就可以这样做

- (void)viewDidLoad {
    [self.view addSubview:[UIView viewWithFrame:CGRectMake(20, 40, 60, 60)
                                  drawRectBlock:^(CGRect rect) {
                                      CGContextRef c = UIGraphicsGetCurrentContext();
                                      CGContextSetFillColorWithColor(c, self.fillColor.CGColor);
                                      CGContextFillRect(c, rect);
                                  }]];
}

现在这个block会保留视图控制器,视图控制器会保留视图,视图会保留这个block,然后再返回来保留视图...

如果您使用的是iOS 5和ARC,可以这样做

- (void)viewDidLoad {
    __weak MyViewController *weakRef = self;
    [self.view addSubview:[UIView viewWithFrame:CGRectMake(20, 40, 60, 60)
                                  drawRectBlock:^(CGRect rect) {
                                      CGContextRef c = UIGraphicsGetCurrentContext();
                                      CGContextSetFillColorWithColor(c, weakRef.fillColor.CGColor);
                                      CGContextFillRect(c, rect);
                                  }]];
}

许可证

版权(C)2012 Hans Sjunnesson

在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人,免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或出售软件副本的权利,并允许软件接收人进行此类操作,前提是受以下条件约束

上述版权声明和本许可声明应包含在软件的副本或实质性部分中。

软件按“原样”提供,不包括任何明示或暗示的保证,包括但不限于适销性、特定用途和版权。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他行为中产生的,无论这种情况是否与软件或其使用或其他交易有关。