目标 C:在 UIScrollView 中触摸时绘制(写入)
Posted
技术标签:
【中文标题】目标 C:在 UIScrollView 中触摸时绘制(写入)【英文标题】:Objective C: Draw(Write) on Touch in a UIScrollView 【发布时间】:2012-01-25 07:13:42 【问题描述】:我的 touchesMoved 上有这段代码,但和其他代码一样,它在 UIScrollView 上不起作用
在这里,我的 touchesMoved:
touchSwiped = YES;
currentTouch = [touch locationInView:self.view];
currentTouch.y -= 5;
UIGraphicsBeginImageContext(self.view.frame.size);
[writeView.image drawInRect:CGRectMake(0, 0, 768, 1024)];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, 15);
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextMoveToPoint(context, endPoint.x, endPoint.y);
CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
CGContextStrokePath(context);
writeView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
endPoint = currentTouch;
touchMoved++;
if (touchMoved == 10)
touchMoved = 0;
所以,我使用手势识别器转移了它,但它仍然无法正常工作。
我使用了 PanGestureRecognizer
这里:
- (void) writePan:(UIPanGestureRecognizer *)writingRecognizerP
switch (writingRecognizerP.state)
case UIGestureRecognizerStateChanged:
[scrollView setScrollEnabled:NO];
[scrollView setUserInteractionEnabled:NO];
touchSwiped = YES;
currentTouch = [writingRecognizerP locationInView:scrollView];
currentTouch.y -= 5;
UIGraphicsBeginImageContext(self.view.frame.size);
[writeView.image drawInRect:CGRectMake(0, 0, 768, 1024)];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, 15);
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextMoveToPoint(context, endPoint.x, endPoint.y);
CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
CGContextStrokePath(context);
writeView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
endPoint = currentTouch;
touchMoved++;
if (touchMoved == 10)
touchMoved = 0;
break;
case UIGestureRecognizerStateEnded:
[scrollView setScrollEnabled:YES];
[scrollView setUserInteractionEnabled:YES];
break;
任何知道我如何在触摸上书写的人?
将不胜感激! :)
【问题讨论】:
什么是writeView?它与视图层次结构中的 self 有什么关系? 它是一个清晰的UIImageView,它是绘图应该出现的地方。 如果您使用 NSLog(@"%@", writeView),它在视图层次结构中是否正确且大小合适? 1) 是否调用了任一方法? 2)你是如何设置手势识别器的? 3) 如果是这样,如果你添加一个 CGContextSetRGBFillColor(context, 1, 0, 0, 1);然后是 CGContextFillRect(context, self.view.bounds),你看到红色矩形了吗?我正在尝试确定确切的故障点 - 这不是为视图绘制更新的正常方式,但看起来它仍然应该工作。 【参考方案1】:您应该在-drawRect:
中完成所有绘图,当有变化时发送您的视图-setNeedsDisplay
或setNeedsDisplayInRect:
消息。
【讨论】:
以上是关于目标 C:在 UIScrollView 中触摸时绘制(写入)的主要内容,如果未能解决你的问题,请参考以下文章