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会使用 ,但通常不会UIGraphicsBeginImageContextWithOptions在自定义视图drawRect本身中使用 。我会将drawRect功能与图像保存逻辑分开(假设您甚至需要/想要后者)。

因此,我个人会创建一个适当大小的自定义视图(例如 1,630 x 2,400),将其添加到滚动视图中,然后将上面的内容用作drawRect该自定义视图。

至于为什么您的再现没有绘制到滚动视图的底部,我怀疑这与您scale为. 通常您使用(非视网膜)、(视网膜)或(使用主屏幕上的比例)。5UIGraphicsBeginImageContextWithOptions120

__block顺便说一句,您不需要CGContextRef. 您可以在没有它的情况下访问该context变量。

于 2013-10-10T19:58:10.517 回答