tre strati di pan Gesto Recogniser Confusione
mentre lo sviluppo di un app sono venuto contro un problema di avere troppe riconoscitori gesto pan. Il mio primo riconoscitore di gesture di pan si trova sul MainViewController, che è un genitore di RecipeSearchVC. Questo riconoscitore di gesti fa scorrere l'intera vista a sinistra o a destra. Il mio secondo indicatore di riconoscimento di pan in in RecipeSearchParametersVC, che è un genitore di un Page View Controller. Il terzo indicatore di gesture gestuale viene aggiunto a una UIControl Wheel nidificata all'interno di un controller di visualizzazione che è rappresentato da PageViewController.
So che sembra pazzesco e si potrebbe sostenere che questo è un design scadente. Tuttavia, credo che questo abbia funzionato in modo coeso, andrebbe bene.
Quando si tenta di ruotare la ruota viene ruotata per un paio di secondi prima che il gesto è superato sia dal PageViewController o MainViewController. Il più delle volte è il MainViewController che prende il sopravvento. Quali tecniche potrei impiegare per separare chiaramente ciascuno di questi riconoscitori di gesti?
EDIT:
Scuse per la vaghezza della mia descrizione quando si tratta di riconoscitori gesto pan. Il MainViewController ha il proprio UIPanGestureRecpgniser per consentirgli di spostare tutto a sinistra oa destra. RecipeSearchParametersVC ha solo un UIPanGestureRecogniser a causa dell'UIPageViewController che contiene. Non aggiunge il riconoscitore di gesti stesso, ma semplicemente li prende dalla paginaViewController. I riconoscitori di gesti di UIControl consentono di tenere traccia della rotazione a cui deve essere sottoposto.
Nel prendere il consiglio dato, posso rimuovere i gesti dal controller di visualizzazione della pagina e sostituirli con i pulsanti. Intendevo solo che funzionasse come le immagini (che possono essere scorse per rivelare più immagini) trovate in iBooks e quindi ho pensato che avrebbe funzionato correttamente.
Codice UIControl UIPanGestureRecogniser
/**
* sent to the control when a touch related to the given event enters the control’s bounds
*
* @param touch uitouch object that represents a touch on the receiving control during tracking
* @param event event object encapsulating the information specific to the user event
*/
- (BOOL)beginTrackingWithTouch:(UITouch *)touch
withEvent:(UIEvent *)event
{
[super beginTrackingWithTouch:touch withEvent:event];
CGPoint touchPoint = [touch locationInView:self];
// filter out touchs too close to centre of wheel
CGFloat magnitudeFromCentre = [self calculateDistanceFromCentre:touchPoint];
if (magnitudeFromCentre < 40) return NO;
// calculate distance from centre
CGFloat deltaX = touchPoint.x - _container.center.x;
CGFloat deltaY = touchPoint.y - _container.center.y;
// calculate the arctangent of the opposite (y axis) over the adjacent (x axis) to get the angle
_deltaAngle = atan2(deltaY, deltaX);
_startTransform = _container.transform;
// selection in limbo so set all sector image's to minimum value by changing current one
[self getSectorByValue:_currentSector].alpha = kMinimumAlpha;
return YES;
}
Sei riuscito a risolvere il tuo problema? – rog