0

loc550にグラデーションで水平線を描きたいです。

CGFloat colors[6] = { 
    138.0f / 255.0f, 1.0f,
    162.0f / 255.0f, 1.0f,
    206.0f / 255.0f, 1.0f};
CGFloat locations[3] = { 0.05f, 0.45f, 0.95f };
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, 3);
CGColorSpaceRelease(colorSpace);

CGPoint startPoint = CGPointMake(0, 0);
CGPoint endPoint   = CGPointMake(0, 550);

 CGContextRef context = UIGraphicsGetCurrentContext(); 
 CGContextSaveGState(context);
 CGContextAddRect(context, CGRectMake(0, 550, self.view.bounds.size.width, 1));
 CGContextClip(context);

CGContextDrawLinearGradient (context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);           

このコードには線が描かれておらず、Xcode で次のエラーが表示されます。

            CGContextAddRect: invalid context 0x0
4

1 に答える 1

1

current が存在することを確認するには、このコードをオブジェクトのdrawRect:メソッドに配置する必要があります。それ以外の場合は、現在の を取得するために使用する必要があります。UIViewcontextUIGraphicsPushContextcontext

ドキュメントからUIGraphicsGetCurrentContext():

デフォルトでは、現在のグラフィックス コンテキストは nil です。ビュー オブジェクトは、その drawRect: メソッドを呼び出す前に、有効なコンテキストをスタックにプッシュして、現在のコンテキストにします。ただし、UIView オブジェクトを使用して描画を行っていない場合は、UIGraphicsPushContext 関数を使用して、有効なコンテキストを手動でスタックにプッシュする必要があります。

この関数は、アプリケーションのメイン スレッドからのみ呼び出す必要があります。

于 2012-08-13T20:38:30.857 に答える