как изменить размер UIView с помощью угловых ручек - аналогично «Страницам», «Keynote» - PullRequest
4 голосов
/ 12 мая 2011

Мне нужно добавить маркеры (по углам) вида, чтобы пользователь мог изменить их размер вместе с ними.Нечто похожее на редактирование графики в приложениях «Страницы» или «Заметки» в Apple.(или в любом другом графическом приложении).Я пытался добавить дескрипторы подпредставлений к данному представлению, но эти представления получали прикосновения только в тех местах, где оба перекрываются, внутри заданных границ вида.Мне нужно иметь возможность перетаскивать любой из угловых маркеров, которые изменят рамку или границы данного вида.(эта часть у меня уже работает).

любые предложения, учебные пособия, ссылки будут оценены :)

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

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

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

Это будет:

  1. Будет дано представление, чтобы манипулировать и масштабировать себя соответственно (немного больше, но с тем же центром)
  2. Нарисуй сам (ручки и бордюры) - реализуй -(void) drawRect:(CGRect)rect
  3. Регистрация распознавателей жестов
  4. При перемещении ручки измените размер основного вида и себя соответственно
  5. Когда центр переместится, переместите центр основного вида и себя.

Возможно, вам будет проще иметь дело с жестами, если вы сделаете каждую ручку также UIView, но нетрудно создать несколько зон в вашем виде и проверить, в какой из них находится касание.

(не забудьте сделать сенсорные зоны достаточно большими)

1 голос
/ 27 октября 2012
  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches] anyObject];
    touchStart = [[touches anyObject] locationInView:self];
    isResizingLR = (self.bounds.size.width - touchStart.x < kResizeThumbSize && self.bounds.size.height - touchStart.y < kResizeThumbSize);
    isResizingUL = (touchStart.x <kResizeThumbSize && touchStart.y <kResizeThumbSize);
    isResizingUR = (self.bounds.size.width-touchStart.x < kResizeThumbSize && touchStart.y<kResizeThumbSize);
    isResizingLL = (touchStart.x <kResizeThumbSize && self.bounds.size.height -touchStart.y <kResizeThumbSize);
 }

 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    CGPoint touchPoint = [[touches anyObject] locationInView:self];
    CGPoint previous=[[touches anyObject]previousLocationInView:self];

    float  deltaWidth = touchPoint.x-previous.x;
    float  deltaHeight = touchPoint.y-previous.y;

    if (isResizingLR) {
        self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth);
    }  
    if (isResizingUL) {
        self.frame = CGRectMake(self.frame.origin.x + deltaWidth, self.frame.origin.y + deltaHeight, self.frame.size.width - deltaWidth, self.frame.size.height - deltaHeight);
    } 
    if (isResizingUR) {
        self.frame = CGRectMake(self.frame.origin.x ,self.frame.origin.y + deltaHeight,  self.frame.size.width + deltaWidth, self.frame.size.height - deltaHeight);      
    } 
    if (isResizingLL) {
        self.frame = CGRectMake(self.frame.origin.x + deltaWidth ,self.frame.origin.y ,  self.frame.size.width - deltaWidth, self.frame.size.height + deltaHeight);   
    }

    if (!isResizingUL && !isResizingLR && !isResizingUR && !isResizingLL) {
        self.center = CGPointMake(self.center.x + touchPoint.x - touchStart.x,self.center.y + touchPoint.y - touchStart.y);
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...