2016-09-05 9 views
-2

対処方法? バックトレース変数を設定するとこのエラーが発生します。UIBezlerPathを埋め込むときに「無効なコンテキスト0x0」

このコードは確かにエラーの原因となっている。

UIBezierPath* ovalPath = [UIBezierPath bezierPath]; 
[ovalPath addArcWithCenter: CGPointMake(CGRectGetMidX(ovalRect), CGRectGetMidY(ovalRect)) radius: CGRectGetWidth(ovalRect)/2 startAngle: 180 * M_PI/180 endAngle: 0 * M_PI/180 clockwise: YES]; 
[ovalPath addLineToPoint: CGPointMake(CGRectGetMidX(ovalRect), CGRectGetMidY(ovalRect))]; 
[ovalPath closePath]; 

[UIColor.grayColor setFill]; 
[ovalPath fill]; 

エラー:

CGContextSetFlatness: invalid context 0x0. Backtrace: 
    <<redacted>+48> 
    <-[ViewController viewDidLoad]+2868> 
    <<redacted>+996> 
    <<redacted>+28> 
     <<redacted>+76> 
     <<redacted>+252> 
     <<redacted>+48> 
     <<redacted>+3456> 
      <<redacted>+1684> 
      <<redacted>+168> 
      <<redacted>+36> 
      <<redacted>+168> 
       <<redacted>+56> 
       <<redacted>+24> 
       <<redacted>+540> 
       <<redacted>+724> 
        <CFRunLoopRunSpecific+384> 
        <<redacted>+460> 
        <UIApplicationMain+204> 
        <main+124> 
Sep 5 21:55:56 Motion Tracking Radar - Aliem[2934] <Error>: 

答えて

3

現在がある場合に[ovalPath fill]にのみ呼び出すことができますグローバルCGContext(すなわちUIGraphicsGetCurrentContext()を呼び出すと、以外のものを返しますnil)。これを得るための最も一般的な方法はdrawRect:の中で実行することですが、通常はCGBitmapContextCreateを使用して一時的なCGContextオブジェクトを作成し、UIGraphicsPushContextの現在のコンテキストにすることができます。

ほとんどの場合、この問題が発生すると、プログラムの任意の場所で画面に描画できると考えられるためです。本当じゃない。ドローサイクルの間だけ描画することができます。これは、コードをビューのdrawRect:に配置することで最もよく行われます。 (レイヤーなどを使用する他のオプションもありますが、これが最も一般的なアプローチです)

ココアの紹介については、Drawing and Printing Guide for iOS(またはこれと同等のもの)を参照してください。

+0

ありがとう! :) – chronikum

関連する問題