Sto eseguendo alcuni calcoli di trascinamento e rotazione utilizzando UIPanGestureRecognizer. L'angolo di rotazione è corretto e la posizione di trascinamento è quasi corretta. Il problema è che mentre vai attorno al centro della scatola devi essere regolato secondo l'angolo e non riesco a capire come.Trascina + Rotazione utilizzando UIPanGestureRecognizer tocca come scendere dalla traccia
Ho incluso le immagini di come appare una rotazione di 180 ma dove si trova il dito durante la rotazione. Semplicemente non so come adattarmi per fare in modo che il blocco rimanga con le dita appropriatamente. Ed ecco un video solo per chiarire perché è uno strano comportamento. http://tinypic.com/r/mhx6a1/5
MODIFICA: Ecco un video del mondo reale di ciò che dovrebbe accadere. Il problema è che nel video dell'iPad il tuo dito si sta muovendo dove nel mondo reale il tuo dito verrebbe cementato in un punto particolare sull'oggetto in movimento. La matematica necessaria è quella di regolare la posizione del tocco lungo l'angolo con una differenza rispetto al centro effettivo. Non riesco a capire la matematica. http://tinypic.com/r/4vptnk/5
Grazie mille!
- (void)handlePan:(UIPanGestureRecognizer *)gesture
{
if (gesture.state == UIGestureRecognizerStateBegan) {
// set original center so we know where to put it back if we have to.
originalCenter = dragView.center;
} else if (gesture.state == UIGestureRecognizerStateChanged) {
[dragView setCenter:CGPointMake(originalCenter.x + [gesture translationInView:self.view].x , originalCenter.y + [gesture translationInView:self.view].y)];
CGPoint p1 = button.center;
CGPoint p2 = dragView.center;
float adjacent = p2.x-p1.x;
float opposite = p2.y-p1.y;
float angle = atan2f(adjacent, opposite);
[dragView setTransform:CGAffineTransformMakeRotation(angle*-1)];
}
}
Il video è stato molto utile, grazie per farlo. Il blocco dovrebbe essere "ruotante" attorno al pulsante delle informazioni come se il pulsante delle informazioni fosse un bastone nel terreno, in modo tale che si stia cercando essenzialmente il rilevamento delle collisioni sul bastone? In questo caso, la matematica che stai cercando è più la distanza tra il bordo del rettangolo e il bordo esterno del pulsante informazioni. Potrei avere del codice che può aiutare con quello dato la posizione arbitraria del blocco mentre lo spingi in giro con il dito. – tobinjim
Questo è solo un piccolo progetto di prova di una funzionalità che sarà inserita in un progetto più ampio. il pulsante informazioni rappresenta un piccolo UIButton rotondo. Il blocco rappresenta ciò che sarà un rect UIImageView. Dovrebbe ruotare intorno e sempre rivolto verso il pulsante. Il problema è che mentre l'utente trascina il blocco, il dito si trova in posizione errata, il che provoca movimenti innaturali. Ho bisogno di un modo per tenere il dito nello stesso punto del blocco. Presumo che abbia a che fare con la regolazione del centro in base all'angolo e alla distanza del tocco dal centro originale. Non riesco a capire la matematica. –
Quindi la domanda è questa: UIImageView dovrebbe rimanere "in contatto" con l'UIButton rotondo? Ho un codice che mantiene ciò che si potrebbe pensare come un suggerimento esattamente a 20 pixel sul lato di una forma che ruotava, quindi con un rettangolo che ruotava il tooltip doveva "scivolare" lontano dal centro del rettangolo come un angolo arrivò, e poi tornò indietro più vicino al centro mentre il lato stretto del rettangolo si stava muovendo. – tobinjim