ios – 如何使用Core Graphics在我的触摸位置绘制圆圈?
发布时间:2020-12-14 18:00:10 所属栏目:百科 来源:网络整理
导读:新程序员在这里.我在尝试使用Core Graphics在触摸位置周围绘制描边弧时遇到问题.我有方法绘制圆圈工作正常,我已经测试,并在我点击屏幕时注册触摸,但当我尝试调用方法绘制圆圈时,我点击,我得到错误“CG??ContextBlahBlah:无效的上下文为0x0” 我认为这是因
新程序员在这里.我在尝试使用Core Graphics在触摸位置周围绘制描边弧时遇到问题.我有方法绘制圆圈工作正常,我已经测试,并在我点击屏幕时注册触摸,但当我尝试调用方法绘制圆圈时,我点击,我得到错误“CG??ContextBlahBlah:无效的上下文为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,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,YES); CGContextStrokePath(ctx); } - (void)drawRect:(CGRect)rect { if (self.touched) [self drawTouchCircle:self.locationOfTouch]; } @end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |