加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读