2

drawRect メソッド内に for ループがあり、画面いっぱいに多数の円を描画します。各円に新しいランダムなストロークがあるようにしようとしています。なぜか何も表示されません。ここに私の randomColor メソッドがあります:

    -(UIColor *) randomColor
{
    int red, green, blue, alpha;

    red = arc4random_uniform(255);
    green = arc4random_uniform(255);
    blue = arc4random_uniform(255);
    alpha = arc4random_uniform(255);

    UIColor *colorToReturn = [[UIColor alloc] initWithRed:red green:green blue:blue alpha:alpha];

    return colorToReturn;
}

ここで実装してみます:

-(void) drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect bounds = [self bounds];

    // Firgure out the center of the bounds rectangle
    CGPoint center;
    center.x = bounds.origin.x + bounds.size.width / 2.0;
    center.y = bounds.origin.y + bounds.size.height / 2.0;

    // The radius of the circle should be nearly as big as the view
    float maxRadius = hypot(bounds.size.width, bounds.size.height) / 2.0;

    // The thickness of the line should be 10 points wide
    CGContextSetLineWidth(ctx, 10);

    // The color of the line should be gray (red/green/blue = 0.6, alpha = 1.0)
//    CGContextSetRGBStrokeColor(ctx, 0.6, 0.6, 0.6, 1.0);
    // The same as
//    [[UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1.0] setStroke];
    // The same as

//    [[UIColor redColor] setStroke];

    // Draw concentric circles from the outside in
    for (float currentRadius = maxRadius; currentRadius > 0; currentRadius -= 20) {
        // Add a path to the context
        CGContextAddArc(ctx, center.x, center.y, currentRadius, 0.0, M_PI * 2.0, YES);

        [[self randomColor] setStroke];

        // Perform drawing instructions; removes path
        CGContextStrokePath(ctx);
    }
4

2 に答える 2

4

UIColorRGB コンポーネントの値として 0 と 1 の間の float を取ります。

 UIColor *colorToReturn = [[UIColor alloc] initWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha];
于 2013-07-18T14:57:58.500 に答える
1

以下の 2 つのマクロを使用して、ランダムな色を取得します。1 つ目は、色を設定するときによく使用する簡単なマクロです。2番目のものは、それを使用してランダムな色を返します:

#define _RGB(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
#define kCLR_RANDOM_COLOR _RGB(arc4random()%255, arc4random()%255, arc4random()%255, 1)
于 2014-01-27T11:11:49.663 に答える