Вопрос

Просто играю с SDK, и мне было интересно, если возможно, событие UITouch может работать внутри UIScrollView.

У меня установить UISCROLLVIEW, который обрабатывает большой UIView, внутри UIView - это UiimageView, мне удалось получить UITouch, чтобы перетащить UIIMageView за пределами UIScrollView, но внутри не регистрируется событие.

Я полагаю, что я пытался достичь, был перетаскивать UiimageView вокруг большого UIView, в то время как UiscrollView перемещается по изображению, если пользователь перетаскивает его за пределы POS, когда UIView, когда UiimageView начал это перетаскивание, если это имеет смысл?

Большое спасибо

Это было полезно?

Решение

(Если я правильно понял вопрос)

UiscrollView перехватывает touchMoved События и не распространяют их на его содержимое, если прокрутка включена. Итак, чтобы сделать перетаскивание содержимого UIScrollView в моем приложении, я сделал следующий трюк:

Touchesbegan: Проверьте, если вы касаетесь области «Draggable». Если да - отключить прокрутку в UiscrollView.

Touchesmured: Теперь в качестве прокрутки отключена, ваше представление содержимого получает это событие, и вы можете соответственно переместить перезарядку UiimageView.

затрагивается: Повторная прокрутка в UIScrolliew.

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

Другие советы

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

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

NSLog(@"DEBUG: Touches began" );

UITouch *touch = [[event allTouches] anyObject];

[super touchesBegan:touches withEvent:event];
}

(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {

NSLog(@"DEBUG: Touches cancelled");

// Will be called if something happens - like the phone rings

UITouch *touch = [[event allTouches] anyObject];

[super touchesCancelled:touches withEvent:event];

}


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

NSLog(@"DEBUG: Touches moved" );

UITouch *touch = [[event allTouches] anyObject];

[super touchesMoved:touches withEvent:event];

}

(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"DEBUG: Touches ending" );
//Get all the touches.
NSSet *allTouches = [event allTouches];

//Number of touches on the screen
switch ([allTouches count])
{
    case 1:
    {
        //Get the first touch.
        UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

        switch([touch tapCount])
        {
            case 1://Single tap

                break;
            case 2://Double tap.

                break;
        }
    }
        break;
}
[super touchesEnded:touches withEvent:event];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top