0

現在、スクロールビューでタッチして描画できるようにするプロジェクトに取り組んでいます。唯一の問題は、スクロールビューの下部に描画できないことです。と何か関係があると考えていますUIGraphicsgetCurrentContext()。どんな助けも素晴らしいでしょう!ここに私がこれまでに持っているものがあります

- (void)drawRect:(CGRect)rect {
    //Here
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(1630, 2400), YES, 5);
    __block CGContextRef context = UIGraphicsGetCurrentContext();
    //CGContextAddRect(context, CGRectMake(0, 0, 1024, 1620));
    //[contentView.layer renderInContext:context];
    CGContextSaveGState(context);
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextSetLineWidth(context, 4.0f);
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineJoin(context, kCGLineJoinRound);
    [[ProblemStore sharedProblemStore] mapCurrentSolutionStrokes:^(SolutionStroke *stroke,   NSUInteger strokeNum) {
      [self drawStroke:stroke inContext:context];
    }];
    CGContextRestoreGState(context);
    UIGraphicsEndImageContext();
}
4

1 に答える 1

0

このdrawRectメソッドが一部のUIViewサブクラス用である場合は、単純化できます。

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextSetLineWidth(context, 4.0f);
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineJoin(context, kCGLineJoinRound);
    [[ProblemStore sharedProblemStore] mapCurrentSolutionStrokes:^(SolutionStroke *stroke,   NSUInteger strokeNum) {
        [self drawStroke:stroke inContext:context];
    }];
}

通常、UIGraphicsBeginImageContextWithOptionsビューをレンダリングして で画像を取得する場合は を使用しますが、通常、カスタム ビューの自体では使用しUIGraphicsGetImageFromCurrentImageContextません。機能を画像保存ロジックから分離します(後者が必要/必要であると仮定します)。UIGraphicsBeginImageContextWithOptionsdrawRectdrawRect

したがって、私は個人的に適切なサイズ (例: 1,630 x 2,400) のカスタム ビューを作成し、それをスクロール ビューに追加し、上記drawRectをそのカスタム ビューの として使用します。

レンディションがスクロール ビューの一番下まで描画されない理由についてscale5UIGraphicsBeginImageContextWithOptions. 通常は1(非網膜)、2(網膜)、または0(メイン画面のスケールを使用) を使用します。

余談ですが、 の__block修飾子は必要ありませんCGContextRefcontext変数なしでアクセスできます。

于 2013-10-10T19:58:10.517 に答える