在UIScrollView中绘图

时间:2013-10-10 18:45:49

标签: ios objective-c uiscrollview

我目前正在开发一个项目,使您可以在滚动视图中进行绘制。唯一的问题是,它不允许我绘制到scrollview的底部。我认为这与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();
}

1 个答案:

答案 0 :(得分: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选择的5 UIGraphicsBeginImageContextWithOptions有关。通常您使用1(非视网膜),2(视网膜)或0(使用主屏幕中的比例)。

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