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