Как рисовать прямые линии на ощупь в iphone, используя рисунок в стиле UItouch или Rubber band

Я новичок в iPhone разработке,

Я делаю приложение, в котором я пытаюсь сделать прямую линию, чтобы она не имела неправильных кривых, она должна быть гладкой.

Я использовал основную графику, но, похоже, она не работает.

Снимок экрана Я просто хочу, чтобы эти линии были нарисованы красным цветом с UITouch, чтобы быть прямым.

Должен ли я перейти на openGl?

Если да, то как я могу реализовать.

  drawImage = [[UIImageView alloc] initWithImage:nil];
drawImage.frame = viewField.frame;
[self.view addSubview:drawImage];
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

mouseSwiped = NO;
UITouch *touch = [touches anyObject];

if ([touch tapCount] == 2) {
    drawImage.image = nil;
    return;
}

lastPoint = [touch locationInView:viewField];
//lastPoint.y = 20;

}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
mouseSwiped = YES;
UITouch *touch = [touches anyObject];    
CGPoint currentPoint = [touch locationInView:viewField];
//currentPoint.y -= 20; // only for 'kCGLineCapRound'
UIGraphicsBeginImageContext(viewField.frame.size);
//Albert Renshaw - Apps4Life
[drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); // for size
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0); //values for R, G, B, and Alpha
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

lastPoint = currentPoint;    
   }

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

  UITouch *touch = [touches anyObject];

  if ([touch tapCount] == 2) {
    drawImage.image = nil;
    return;
  }
  if(!mouseSwiped) {
    //if color == green
    UIGraphicsBeginImageContext(viewField.frame.size);
    [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width,   drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);   //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    CGContextFlush(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
   }
   }

Заранее спасибо!


person Deepranshu    schedule 15.06.2012    source источник
comment
Хорошо: я новичок, поэтому я буду пробовать что-то в своем диапазоне навыков и совершенствоваться, делая это, чтобы позже я мог делать более сложные вещи. Плохо: я новичок, поэтому я буду пробовать сложные вещи, и вместо того, чтобы делать их самостоятельно, я буду расспрашивать код, чтобы сделать это, таким образом я ничему не научусь.   -  person EmilioPelaez    schedule 15.06.2012
comment
Как выглядит код, который вы написали до сих пор? Вы можете опубликовать это здесь? С какой частью у вас проблемы?   -  person user1118321    schedule 15.06.2012
comment
Если вы хотите нарисовать прямую линию, не сохраняйте каждую точку, к которой вы прикоснулись. Сохраните начальную точку и то место, где находится текущее касание пользователя, и просто проведите линию от одного к другому. Похоже, вы скопировали образец кода для рисования от руки куда-то, что вам не нужно.   -  person jrturton    schedule 15.06.2012
comment
Кроме того, вопрос в его нынешнем виде заключается в том, что вы должны были изначально опубликовать вчера — в нем есть код, который вы использовали, и четкое описание проблемы — молодец :)   -  person jrturton    schedule 15.06.2012
comment
спасибо @jrturton, но не могли бы вы пояснить, что вы говорите, и показать ошибку в коде, с помощью которой я могу получить желаемый результат, или я должен полностью изменить его.   -  person Deepranshu    schedule 15.06.2012
comment
Вы понимаете, что делает ваш текущий код?   -  person jrturton    schedule 15.06.2012
comment
Да, я знаю, что это просто добавление точек в представление при перемещении касания. Но можете ли вы предложить что-нибудь еще, что больше подходит для приложения, которое я пытаюсь сделать.   -  person Deepranshu    schedule 15.06.2012
comment
См. здесь stackoverflow.com/questions/11050037/   -  person jrturton    schedule 15.06.2012
comment
Спасибо. Но этот вопрос задал только я.   -  person Deepranshu    schedule 18.06.2012
comment
iphoneapp-dev.blogspot.com посмотрите его.и скачайте проект drawimage.в этом проекте вы рисуете изображение изображение сохраняется в библиотеке фотографий .. вы можете сохранить в любом месте.   -  person    schedule 19.06.2012
comment
@MohitGupta спасибо за вашу поддержку, но я использую тот же код, но линии не получаются прямыми. Вы также можете увидеть снимок, прикрепленный к вопросам.   -  person Deepranshu    schedule 19.06.2012
comment
Итак, что именно вы хотите сделать. Пожалуйста, объясните мне правильно. Тогда я помогу вам.   -  person    schedule 19.06.2012
comment
Итак, во-первых, вам нужно найти точку, тогда вы сможете встретиться с обеими точками. Тогда линия будет прямой.   -  person    schedule 19.06.2012
comment
@MohitGupta Я уже высказал мнение, но линии касания и рисования не прямые. Я просто хочу соединить две точки независимо от пути, выбранного на чертеже.   -  person Deepranshu    schedule 19.06.2012
comment
pastebin.com/SMq0WvQh видите, я вставил код по этой ссылке..   -  person    schedule 19.06.2012
comment
@MohitGupta Не могли бы вы предоставить мне полный код.   -  person Deepranshu    schedule 20.06.2012
comment
это невозможно, потому что я не знаю, что именно вы хотите сделать. Итак, во-первых, вы должны шаг за шагом рассказать мне о своих требованиях. Кстати, в stackoverflow никто не предоставляет полный код. мы можем дать вам просто идею.   -  person    schedule 20.06.2012
comment
@Deepranshu, у тебя есть решение твоей проблемы? на самом деле я столкнулся с той же проблемой end-and-ro" title="ios рисует линию как со стрелкой, так и с начальной конечной точкой, пока палец касается конца и ro"> stackoverflow.com/questions/24423537/   -  person Nikunj Jadav    schedule 26.07.2014


Ответы (1)


Судя по изображению, которое вы разместили, я предлагаю вам изменить свой подход. Начните рисовать двойным щелчком мыши. Затем коснитесь (= touchesStarted и touchesEnded, а не touchesMoved) каждой точки края вашего многоугольника. Нарисуйте прямую линию между этими точками по мере продвижения. Завершите полигон двойным щелчком. Вы можете решить закрыть свой путь автоматически, если конечная точка находится достаточно близко к начальной точке.

person Beav    schedule 23.11.2012