Как я могу нарисовать динамический прямоугольник на экране в соответствии с событием touchMove на iOS

#objective-c #ios #xcode #cocoa-touch #ipad

#objective-c #iOS #xcode #cocoa-touch #iPad

Вопрос:

прямоугольник будет считаться двумя точками, первая точка будет точкой начала касания, а при touchMove будет второй точкой, прямоугольник будет динамически рисоваться в соответствии с движением пальца пользователя (например, когда вы нажимаете одним щелчком мыши на рабочем столе и перемещаете мышь, вы получите динамически прямоугольник).

Спасибо

Комментарии:

1. Спасибо за непринятие. В моем списке запретов

Ответ №1:

Хорошо, вот как вы можете нарисовать свою прямоугольную форму touchesMoved (используйте @Nekto touchesBegan для сохранения начальной точки вашей прямоугольной формы).

Давайте предположим, что вы сохраняете ссылку на UIView, который мы рисуем, и вызываем его drawnView . В touchesBegan мы устанавливаем начало кадра для drawnView

Вот touchesMoved :

 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event
{
    // We only take care of a single touch
    if ([touches count] == 1)
    {
        UITouch *touch = [touches anyObject];
        // Find the width and height of the rect
        CGRect drawnFrame = drawnView.frame
        drawnFrame.size.width = [touch locationInView:parentView].x - drawnFrame.origin.x
        drawnFrame.size.height = [touch locationInView:parentView].y - drawnFrame.origin.y
        [drawnView setFrame:drawnFrame];
    }
}
  

Не копируйте и не вставляйте этот код, я не писал его в Xcode или что-то еще. В нем могут быть ошибки (наверняка). Но я надеюсь, что это поможет найти ваше решение. И будьте осторожны, я не могу сказать, как он будет вести себя, если вы проведете пальцем вверх или влево (отрицательные значения для высоты и ширины).

Ответ №2:

  1. Вы должны определить подкласс UIView , например, DrawingView
  2. В DrawingView вы должны реализовать следующие методы:

    Сохранить начальную точку в методе: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    Перерисуйте прямоугольник здесь - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

    Скрыть прямоугольник (или сохранить его) здесь - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event и здесь - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

Например, в первом методе вы могли бы определить начальную точку следующим образом:

 CGPoint startCornerOfYourRect;
for (UITouch *touch in touches)
{
    startCornerOfYourRect  = [touch locationInView:self];
    break;
}
  

Комментарии:

1. можете ли вы добавить функцию, которая рисует прямоугольник?

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