Перетаскивание UIImageview из UIScrollview - PullRequest
1 голос
/ 07 декабря 2011

У меня много uiimageviews в uiscrollview. Я пытаюсь вытащить uiimageview из uiscrollview. Я создал подкласс uiscollview и написал методы custon touchbegan, toucmoved и touchended для передачи касания суперклассу scrollview по событию перетаскивания с прокруткой и моему методу touchmethods класса основного viewcontroller по событиям, отличным от scroll -events. Чтобы вытащить uiimageview из uiscrollview, я удаляю его из его суперпредставления (scrollview) и добавляю в mainview по методу touchbegan. мой uiimageview удален из scrollview и успешно добавлен в mainview. Теперь проблема здесь: при первом касании мой метод touchbegan вызывается, но метод touchmoved не вызывается, когда я перемещаю представление uiimageview. на втором касании вперед все работает и вид изображения вытащен вид прокрутки

Обновление: я создал подкласс класса UIImageView и написал методы touchbegan, touchmoved и touchended внутри подкласса uiimageview, и теперь он работает. Ранее я использовал сенсорные методы основного вида, поэтому touch-методы также рассматривали возможность касания UIScollview. Но сейчас рассматриваются только касания uimageviews. Я также добавил еще одно изменение: я отключил прокрутку в touchbegan и включил ее в touchend. Thanx

1 Ответ

1 голос
/ 07 декабря 2011

Для меня лучше всего не перемещать uiImageView, который находится в просмотре прокрутки, а создать дублированное представление (в контроллере управляющего представления) и переместить его касаниями, затем добавить это в основной вид и затем впоследствии удалить оригинал.

Этот подход также выглядит лучше, если пользователь передумает на полпути и решит не тянуть его в конце концов.

EDIT: Я проверил свое приложение, чтобы обновить себя, что я делаю, и я тоже не трогался и не заканчивал работу над оригинальным элементом. У меня есть распознаватель жестов для каждого из представлений в режиме просмотра слайдов, и когда он запускается, он сообщает делегату (viewcontroller, который является родителем представления прокрутки), что перетаскивание выполняется. Из переданного объекта я могу получить CGPoint и действовать соответственно:

UILongPressGestureRecognizer *myRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(drag:)];
[myRecognizer setDelegate:self];
[myItemInsideScrollView addGestureRecognizer:myRecognizer];


-(void)drag:(UILongPressGestureRecognizer *)sender {
    [self.view bringSubviewToFront:[(UILongPressGestureRecognizer*)sender view]];
    CGPoint translatedPoint = [sender locationInView:self.view];

    // if we are not already dragging we create the duplicate view
    // if we are already dragging just update the location of the duplicate view

    // next check if drag has ended and if so call a method to do what we want
    if ( dragging ) {
        if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
            [self checkForDragRelease:(CGPoint)translatedPoint];
        }
    }

}
...