iPhone App: реализация перетаскивания изображений в UIView - PullRequest
9 голосов
/ 28 декабря 2011

В моем приложении для iPhone я хочу реализовать функциональность, как показано ниже

enter image description here

пользователь может выбрать форму (изображение) из одного вида и поместить в другой вид

Как мне этого добиться?

Пожалуйста, помогите и предложите.

Спасибо.

Ответы [ 6 ]

6 голосов
/ 29 декабря 2011

Самый простой способ - использовать UIPanGestureRecognizer. Это даст вам сообщения, когда представление перемещается и когда оно отбрасывается. Когда он перемещен, обновите его центр. Когда он отброшен, проверьте, находится ли его положение в границах вида, в который вы хотите поместить. (Возможно, вам придется преобразовать координаты в систему координат целевого представления.) Если это так, выполните соответствующее действие.

5 голосов
/ 31 декабря 2011
2 голосов
/ 30 декабря 2011

Вы можете сослаться на предыдущий пост, который определенно поможет вам достичь этой функциональности ...

  1. Базовое перетаскивание в iOS
  2. Создание интерфейса перетаскивания на iphone
  3. Перетаскивание iPhone

Для всех вышеперечисленных ссылок необходимо помнить, чтоСначала вам нужно получить событие TouchesBegin для любого элемента управления, а затем получить событие TouchesMoved для того же элемента управления.

В событии TouchesMoved вам просто нужно получить центральную точку (CGPoint)контроля.И когда вы отпустите кнопку управления будет установлен на CGPoint.Если это создает проблему, вы можете взять это CGPoint в переменной и установить эту точку в TouchesEnded событии.

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

ДЛЯ БОЛЬШЕ ЧАСТИ КОДИРОВАНИЯ:

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

        NSLog(@"%f,%f", self.center.x, self.center.y);
        CGPoint newLoc = CGPointZero;

        newLoc = [self.mainView convertPoint:[[touches anyObject] locationInView:self.superview] toView:self.superview];
        float newX = newLoc.x + self.superview.frame.origin.x + (self.frame.size.width /2) + [[touches anyObject] locationInView:self].x ;
        float newY = newLoc.y - (((UIScrollView *)self.superview).contentOffset.y *2) ;
        NSLog(@"content offset %f", ((UIScrollView *)self.superview).contentOffset.y);

        self.scrollParent.scrollEnabled = NO;
        NSLog(@"%f,%f", self.center.x, self.center.y);

        newLoc = CGPointMake(newX, newY);
        [self.superview touchesCancelled:touches withEvent:event];                                                               
        [self removeFromSuperview];
        NSLog(@"%f,%f", self.center.x, self.center.y);


        self.center = CGPointMake(newLoc.x, newLoc.y);
        [self.mainView addSubview:self];
        NSLog(@"%f,%f", self.center.x, self.center.y);

        [self.mainView bringSubviewToFront:self];
        isInScrollview = NO;
}   

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

    [UIView beginAnimations:@"stalk" context:nil];
    [UIView setAnimationDuration:.001];
    [UIView setAnimationBeginsFromCurrentState:YES];

    UITouch *touch = [touches anyObject];

    self.center = [touch locationInView: self.superview];

    [UIView commitAnimations];
    if ((self.center.x + (self.frame.size.width / 2)) > 150 && hasExitedDrawer && !self.scrollParent.dragging ) {
        self.scrollParent.scrollEnabled = NO;

        [self.delegate moveItemsDownFromIndex: ((self.center.y + (self.scrollParent.contentOffset.y)) / 44) + 1 ];
        //NSLog(@"%i", ((self.center.y + (self.scrollParent.contentOffset.y *2)) / 44) + 1);
    }

    if (self.center.x + (self.frame.size.width / 2) < 150) {

        hasExitedDrawer = YES;

    }

}   

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

    if ((self.center.x + (self.frame.size.width / 2)) > 150 && hasExitedDrawer && !self.scrollParent.dragging ) {
        CGPoint newLoc = CGPointZero;

        newLoc = [self.scrollParent convertPoint:[[touches anyObject] locationInView:self.superview] toView:self.superview];
        float newY = newLoc.y + (self.scrollParent.contentOffset.y *2);

        [self.scrollParent insertSubview:self atIndex:((self.center.y + (self.scrollParent.contentOffset.y)) / 44) ];
        self.frame = CGRectMake(0, newY, self.frame.size.width, self.frame.size.height);
        isInScrollview = YES;
        hasExitedDrawer = NO;
    }
}

Этот код может содержать некоторые не относящиеся к делу, нодает вам больше идей ...

1 голос
/ 29 октября 2015

Добавление компонента перетаскивания в приложение для iOS Вопрос

Я думаю, вы собираетесь создать функцию, такую ​​как Добавить в корзину, в большинстве приложений для покупок, таких как Amazon, Flip kart ии т.д ..

1 голос
/ 20 мая 2015

Вы можете использовать ниже библиотеки с открытым исходным кодом:

  1. Библиотека 1 OBDragDrop
  2. Библиотека 2 AJWDraggableDroppable
  3. Библиотека 3 iOS-DragAndDrop
  4. Библиотека 4 ios-drag-and-drop
0 голосов
/ 28 декабря 2011

Трехступенчатое решение

1) вам нужно будет реализовать / прослушать сенсорные события

2) реализовать перетаскивание и сенсорные события

3), а затем управлять методом movetosuperview.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...