如何在Objective-C中为iOs绘制随机矩形?

时间:2015-11-09 14:53:39

标签: ios objective-c

我想创建一个类,让我们称之为CustomView,我在其中编写一个用于创建矩形的自定义方法。矩形的位置和大小应基于随机数。

这是我CustomView到目前为止的样子:

CustomView.m

#import "CustomView.h"

@implementation ShadowView

- (void)drawRect:(CGRect)rect {
    int smallest = 0;
    int largest = 100;
    int r1 = smallest + arc4random() %(largest+1-smallest);
    int r2 = smallest + arc4random() %(largest+1-smallest);

    int smallest2 = 0;
    int largest2 = 300;
    int r3 = smallest + arc4random() %(largest2+1-smallest2);
    int r4 = smallest + arc4random() %(largest2+1-smallest2);

    // Drawing code
    CGRect rectangle = CGRectMake(r1, r2, r3, r4);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.0); 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.5);
    CGContextFillRect(context, rectangle);
    CGContextStrokeRect(context, rectangle);
}

@end

CustomView.h

#import <UIKit/UIKit.h>
@interface ShadowView : UIView

@end

现在当我尝试通过[CustomView drawRect]在ViewController.m中调用此方法时,我只会收到错误?我做错了什么?

1 个答案:

答案 0 :(得分:1)

您无法在drawRect:上致电ShadowView

您需要做的是创建ShadowView的实例,并将其添加到某个父视图中。就是这样。你不要自己打电话给drawRect:

ShadowView *view = [[ShadowView alloc] initWithFrame:CGRectMake(20, 20, 40, 50)]; // whatever frame you need
[self.view addSubview:view];

但是,考虑到drawRect:的实施,这并没有多大意义。你想要做的似乎是一个随机大小和位置的矩形,然后填充白色和黑色边框。

这是另一个想法。更改视图的init方法,为自己提供一个随机框架。

在CustomView.m中:

- (instancetype)init {
    int smallest = 0;
    int largest = 100;
    int r1 = smallest + arc4random_uniform(largest+1-smallest);
    int r2 = smallest + arc4random_uniform(largest+1-smallest);

    int smallest2 = 0;
    int largest2 = 300;
    int r3 = smallest + arc4random_uniform(largest2+1-smallest2);
    int r4 = smallest + arc4random_uniform(largest2+1-smallest2);

    // Drawing code
    CGRect rectangle = CGRectMake(r1, r2, r3, r4);

    return [super initWithFrame:rectangle];
}

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.0); 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.5);
    CGContextFillRect(context, rect);
    CGContextStrokeRect(context, rect);
}

现在,按如下方式创建和添加视图:

ShadowView *view = [[ShadowView alloc] init];
[self.view addSubview:view];

另请注意使用arc4random_uniform代替arc4random

假设您想添加其中5个随机矩形,您可以这样做:

for (int i = 0; i < 5; i++) {
    ShadowView *view = [[ShadowView alloc] init];
    [self.view addSubview:view];
}