iOS - добавьте жест двумя пальцами при просмотре прокрутки с помощью scrollViewDidZoom и прикосновения к движению - PullRequest
0 голосов
/ 08 марта 2019

Я работаю над добавлением жеста двумя пальцами для панорамирования в пользовательском 3D-виде, который находится в UIScrollView. Внутренние работы сделаны не мной, а просто подсчет точек и способ их построения в 3D-виде. Моя главная проблема - функции scrollViewDidZoom и touchesMoved, противоречащие подходам, которые я пробовал.

Я пытался подсчитать touches функции touchesMoved, но она не очень стабильна.

Я пытался добавить UIPanGestureRecognizer, но он конфликтует с scrollViewDidZoom. Кроме того, поскольку я использую пользовательское свойство, свойства minimumNumberOfTouches и maximumNumberOfTouches не работают должным образом.

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

Это написано в Obj-c, отсюда и тэг, но ответы на Swift приветствуются.

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

- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView {
    return zoomDummyView;
}

- (void)scrollViewDidZoom:(UIScrollView*)scrollView {

    if ([scrollView zoomScale] != 3.0f)
    {
        //do calculation on zooming
    }
}

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

    [super touchesBegan:touches withEvent:event];

    NSArray* array = [touches allObjects];

    //this is what I've tried so far - check count of touches and then use the bool to denote pan mode or not

    panMode = array.count > 1 ? true : false

    for ( int i = 0; i < [array count]; ++i )
    {
        //do point calculation    
    }
}

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

    [super touchesMoved:touches withEvent:event];


    NSArray* array = [touches allObjects];
    for ( int i = 0; i < [array count]; ++i )
    {
        //some point calculation

    // simulation of mouse control for the 3D view, as you can see panMode is used to indicate movement between tilt and pan.

        input.isLeftButtonDown = !panMode; // for tilt mode
        input.isRightButtonDown = false;
        input.isMiddleButtonDown = panMode; // for pan mode
        input.isSideButton1Down = false;
        input.isSideButton2Down = false;

        //input simulation
    }
}

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