drei Ebenen der Pan Geste Recogniser Verwirrung
Während eine App Entwicklung Ich habe mit zu viele pan Geste recognisers gegen ein Problem kommen. Mein erster Pan-Gesten-Erkenner befindet sich auf dem MainViewController, der ein Elternteil der RecipeSearchVC ist. Dieser Gestenerkenner verschiebt die gesamte Ansicht nach links oder rechts. Meine zweite Pan-Gesten-Erkennung in der RecipeSearchParametersVC, die ein Elternteil eines Page View-Controllers ist. Die dritte Gestenerkennung für Schwenkgeste wird einem UIControl-Rad hinzugefügt, das in einem Ansichtscontroller verschachtelt ist, der durch den PageViewController dargestellt wird.
Ich weiß, das klingt verrückt und es könnte argumentiert werden, dass dies ein schlechtes Design ist. Ich glaube jedoch, dass dies in kohäsiver Weise funktioniert, wäre in Ordnung.
Wenn Sie versuchen, das Rad zu drehen, wird es für eine oder zwei Sekunden gedreht, bevor die Geste entweder vom PageViewController oder vom MainViewController übernommen wird. Meistens übernimmt der MainViewController die Kontrolle. Welche Techniken könnte ich anwenden, um jeden dieser Gestenerkenner eindeutig zu trennen?
EDIT:
Apologies für die Unbestimmtheit meiner Beschreibung, wenn es um die Pfanne Geste recognisers kommt. Der MainViewController hat seinen eigenen UIPanGestureRecpgniser, damit er alles nach links oder rechts verschieben kann. Der RecipeSearchParametersVC hat nur einen UIPanGestureRecogniser, weil er UIPageViewController enthält. Es fügt den Gestenerkenner nicht selbst hinzu, sondern nimmt sie einfach vom pageViewController. Die Gestenerkenner von UIControl ermöglichen es, die Rotation, der sie unterzogen werden soll, zu verfolgen.
In Anbetracht der gegebenen Ratschläge kann ich die Gesten aus dem Seitenaufruf-Controller entfernen und sie mit Schaltflächen ersetzen. Ich wollte nur, dass dies so funktioniert wie die Bilder (die man scrollen kann, um mehr Bilder zu entdecken), die man in iBooks findet, und so dachte ich, dass es gut funktionieren würde.
UIControl UIPanGestureRecogniser-Code
/**
* 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;
}
Konnten Sie Ihr Problem lösen? – rog