0

現在、UIView を使用してグリッド/シネマティック オーバーレイを作成しようとしています。

いくつかのメソッドを作成しました。drawVerticalLine と Horizo​​ntal Lines など...

UIGridView を初期化する UIViewController があります。すべてのメソッドを draw rect に入れて、一度に描画できます。

ただし、ViewController から個別に呼び出すことができるようにしたいと考えています。そうしようとするenter code hereと。「: CGContextDrawPath: 無効なコンテキスト 0x0」というコードが表示されます。ViewController から「drawGrid :withColor :andLines;」を呼び出せるようにしたい か何か

    -

(void)drawRect:(CGRect)rect 
{

    if (self.verticalLinesON == YES) {
        [self drawVerticalLinesForGrid:100 :[UIColor redColor] :[UIColor greenColor]];

    }

    [self show16NineOverLay:[UIColor orangeColor]];

    [self show4ThreeOverLay:[UIColor orangeColor]];

    [self drawHorizontalLinesForGrid:100 :[UIColor blueColor] :[UIColor yellowColor]];

}
-(void)drawVerticalLinesForGrid:(float)sectionsVertically :(UIColor *)lineColor1 :(UIColor *)lineColor2
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2);
    int i = 0;
    float amountOfSectionsVertically = sectionsVertically;
    for (i = 1; i < amountOfSectionsVertically; i++)
    {//Horizontal Lines first.
        float xCoord = self.frame.size.width * ((i+0.0f)/amountOfSectionsVertically);
        CGContextMoveToPoint(context, xCoord, 0);
        CGContextAddLineToPoint(context, xCoord, self.frame.size.height);
        if (i%2  == 1)
        {//if Odd
            CGContextSetStrokeColorWithColor(context, lineColor1.CGColor);
        }
        else if(i%2  == 0)
        {//if Even
            CGContextSetStrokeColorWithColor(context, lineColor2.CGColor);
        }
        CGContextStrokePath(context);
    }
}
-(void)drawHorizontalLinesForGrid :(float)sectionsHorizontally :(UIColor *)lineColor1 :(UIColor *)lineColor2
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2);
    int i = 0;
    float amountOfSectionsHorizontally = sectionsHorizontally;
    for (i = 1; i < amountOfSectionsHorizontally; i++)
    {//Vertical Lines first.
        float yCoord = self.frame.size.height * ((i+0.0f)/amountOfSectionsHorizontally);
        CGContextMoveToPoint(context, 0, yCoord);
        CGContextAddLineToPoint(context, self.frame.size.width, yCoord);
        if (i%2  == 1)
        {//if Odd
            CGContextSetStrokeColorWithColor(context, lineColor1.CGColor);
        }
        else if(i%2  == 0)
        {//if Even
            CGContextSetStrokeColorWithColor(context, lineColor2.CGColor);
        }
        CGContextStrokePath(context);
    }
}
-(void)show16NineOverLay:(UIColor *)lineColor
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 10);
    //x/y
    float yCoord = (0.5) * (self.frame.size.height * (1.778)
4

1 に答える 1

1

あなたがすべきことは、何を描画するか (垂直のみ、水平のみ、両方など) を指定するグリッド ビュー クラスに状態を設定setNeedsDisplayし、ビューを呼び出すことです。

これにより、 への呼び出しがトリガーされdrawRect:ます。次に、drawRect:メソッドは現在の状態を確認し、目的の部分を描画するために適切なメソッドのみを呼び出す必要があります。

drawRect:ビューを直接呼び出してはいけません。

于 2013-08-26T21:33:53.933 に答える