2013-07-16 2 views
0

Я работаю над iPhone-приложением, в котором хочу рисовать линию, если начальная точка UILabel, также я хочу обнаружить текст, который касается. Как это возможно? Пожалуйста, помогите мне. Спасибо заранее. Вот мой код для рисования линии. Используя этот код, я могу рисовать линию, но хочу рисовать линию с метки.Как нарисовать линию от центра UILabel?

- (CAShapeLayer *)createShapeLayer:(UIView *)view 
{ 
    CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 

    shapeLayer.fillColor = [UIColor clearColor].CGColor; 
    shapeLayer.strokeColor = [UIColor redColor].CGColor; 
    shapeLayer.lineWidth = 5.0; 

    [view.layer addSublayer:shapeLayer]; 

    return shapeLayer; 
    } 

    - (void)handlePanGesture:(UIPanGestureRecognizer *)gesture 
    { 
    static CAShapeLayer *shapeLayer; 
    static CGPoint origin; 

    if (gesture.state == UIGestureRecognizerStateBegan) 
    { 
     shapeLayer = [self createShapeLayer:gesture.view]; 
     origin = [gesture locationInView:gesture.view]; 

     NSLog(@"cgpoint %f and y %f",origin.x,origin.y); 


    } 
    else if (gesture.state == UIGestureRecognizerStateChanged) 
    { 
     UIBezierPath *path1 = [UIBezierPath bezierPath]; 
     [path1 moveToPoint:origin]; 
     CGPoint location = [gesture locationInView:gesture.view]; 
     [path1 addLineToPoint:location]; 
     shapeLayer.path = path1.CGPath; 
    } 
    else if (gesture.state == UIGestureRecognizerStateEnded || 
      gesture.state == UIGestureRecognizerStateFailed || 
      gesture.state == UIGestureRecognizerStateCancelled) 
    { 
     shapeLayer = nil; 
    } 
} 
+0

pls положить некоторый код u попробовал еще – Warewolf

+1

Первый шаг - написать код. Вы еще что-нибудь пробовали? Просто предупреждение: не говорите «нет» (неважно, говорите ли вы «я не знаю, с чего начать»), иначе вы получите ярость переполнения стека. – borrrden

+0

Я добавил код для рисования линии, но как начать линию из центра UILabel – user2586519

ответ

0

У меня есть идея о том, как вы могли бы обнаружить текст, который вы потрогать, и это на самом деле работает, вот что я приготовил:

Вы добавляете это к этикетке:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
    [textLabel addGestureRecognizer:tap]; 
    textLabel.userInteractionEnabled = YES; 
    [tap release]; 

Внедрение:

- (void) handleTap:(UITapGestureRecognizer *)tap 
{ 
    CGPoint point = [tap locationInView:tap.view]; 
    UILabel *label = (UILabel *)tap.view; 

    CGSize blankSize = [@" " sizeWithFont:label.font]; 

    CGSize textSize = [label.text sizeWithFont:label.font]; 
    if (textSize.width - point.x < 0) 
    { 
     // out of bounds 
    } 
    else 
    { 
     NSArray * array = [label.text componentsSeparatedByString:@" "]; 
     CGFloat value = 0.0f; 
     for (NSString *str in array) 
     { 
      CGSize textSize = [str sizeWithFont:label.font]; 

      if (textSize.width + value > point.x) 
      { 
       NSLog(@"touched str %@",str); 
       break; 
      } 
      value += textSize.width + blankSize.width; 
     } 
    } 



//PLACE_THE_DIFFERENCE_BETWEEN_THE_CENTER_OF_THE_LABEL_AND_THE_OTHER_OBJECT_OR_POINT as width 

CGRect rect = CGRectMake(0, 0, labe.frame.size.width , label.frame.size.height); 
    //i used the touch point as an end point , you just need to find the correct rect to draw in and that's it 

    UIImage *img = [self drawLine:rect fromPoint:CGPointMake(0, label.center.y) toPoint:point withColor:[UIColor blackColor]]; 

    //make sure you don't add imageview one over another so you could tag it and remove the subview with the specified tag 

    UIImageView *imgview = [[UIImageView alloc] initWithFrame:CGRectMake(label.center.x, 0, rect.size.width, rect.size.height)]; 
    imgview.image = img; 
    imgview.backgroundColor = [UIColor redColor]; 
    [label.superview addSubview:imgview]; 
    [imgview release]; 
} 

-(UIImage*)drawLine:(CGRect) frame fromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint withColor:(UIColor *)color 
{ 
    UIGraphicsBeginImageContext(frame.size); 
    CGContextRef thisContext = UIGraphicsGetCurrentContext(); 



    CGContextSetLineWidth(thisContext,5); 


    CGContextSetStrokeColorWithColor(thisContext, color.CGColor); 



    CGContextMoveToPoint(thisContext, 
         startPoint.x, 
         startPoint.y 
         ); 

    CGContextAddLineToPoint(thisContext, 
          endPoint.x , 
          endPoint.y 
          ); 

    CGContextStrokePath(thisContext); 

    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 


    return img; 
} 

Он будет записывать слова, затронутые.

Я не принимал во внимание y, но это не должно удерживать никого.

+0

Спасибо, его рабочий тон :) – user2586519

+0

Рад, что я мог бы помочь, было интересно проверить, какое слово тронуто. – soryngod

Смежные вопросы