![](/img/trans.png)
[英]In iOS Development, using Core Graphics and/or Quartz 2D, how can I draw a circle filled with a gradient in such a manner that it looks like a sphere?
[英]How can I use Core Graphics to draw a circle at my touch location?
新程序员在这里。 我在尝试使用Core Graphics在触摸位置周围绘制描边弧时遇到问题。 我有方法绘制圆圈工作正常,我已经测试,并在我点击屏幕时注册触摸,但当我尝试调用方法绘制圆圈时,我点击,我得到错误“CGContextBlahBlah:无效的上下文为0x0"
我认为这是因为我没有在drawRect :()中调用该方法。
那我怎么能在触摸时调用这个方法呢? 此外,如何在我的绘制方法中使用“CGPoint locationOfTouch”作为参数?
以下是我正在使用的代码块。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint locationOfTouch = [touch locationInView:self];
[self drawTouchCircle:(locationOfTouch)];
[self setNeedsDisplay];
}
-(void)drawTouchCircle:(CGPoint)locationOfTouch
{
CGContextRef ctx= UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextSetLineWidth(ctx,5);
CGContextSetRGBStrokeColor(ctx,0.8,0.8,0.8,1.0);
CGContextAddArc(ctx,locationOfTouch.x,locationOfTouch.y,30,0.0,M_PI*2,YES);
CGContextStrokePath(ctx);
}
在此先感谢您的帮助!
你是对的。 问题是,你应该实现一个为你调用它的drawRect
方法,而不是自己调用drawTouchCircle
,因此你的touches
方法只需要调用setNeedsDisplay
,而drawRect
将负责其余的工作。 因此,您可能希望将触摸位置保存在类属性中,然后在drawRect
检索它:
@interface View ()
@property (nonatomic) BOOL touched;
@property (nonatomic) CGPoint locationOfTouch;
@end
@implementation View
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
self.touched = YES;
UITouch *touch = [touches anyObject];
self.locationOfTouch = [touch locationInView:self];
[self setNeedsDisplay];
}
- (void)drawTouchCircle:(CGPoint)locationOfTouch
{
CGContextRef ctx= UIGraphicsGetCurrentContext();
CGRect bounds = [self bounds];
CGPoint center;
center.x = bounds.origin.x + bounds.size.width / 2.0;
center.y = bounds.origin.y + bounds.size.height / 2.0;
CGContextSaveGState(ctx);
CGContextSetLineWidth(ctx,5);
CGContextSetRGBStrokeColor(ctx,0.8,0.8,0.8,1.0);
CGContextAddArc(ctx,locationOfTouch.x,locationOfTouch.y,30,0.0,M_PI*2,YES);
CGContextStrokePath(ctx);
}
- (void)drawRect:(CGRect)rect
{
if (self.touched)
[self drawTouchCircle:self.locationOfTouch];
}
@end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.