Использование UITouch внутри UiscrollView
-
25-09-2019 - |
Вопрос
Просто играю с 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];
}