Я работаю над добавлением жеста двумя пальцами для панорамирования в пользовательском 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
}
}