Smooth Move e un pizzico di UIImageView
-
22-09-2019 - |
Domanda
Ho una visualizzazione dell'immagine che voglio essere in grado di muoversi, e un pizzico di allungarlo. E 'tutto di lavoro, ma e' un pò nervosi quando inizio a fare movimenti di pressione. La posizione sarà saltare avanti e indietro tra le due dita.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
startLocation = [[touches anyObject] locationInView:mouth_handle];
if([touches count] == 2) {
NSArray *twoTouches = [touches allObjects];
UITouch *first = [twoTouches objectAtIndex:0];
UITouch *second = [twoTouches objectAtIndex:1];
initialDistance = distanceBetweenPoints([first locationInView:mouth_handle],[second locationInView:mouth_handle]);
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint pt = [[touches anyObject] locationInView:mouth_handle];
CGRect frame = [mouth_handle frame];
frame.origin.x += pt.x - startLocation.x;
frame.origin.y += pt.y - startLocation.y;
frame.origin.x = (frame.origin.x < 58) ? 58 : frame.origin.x;
frame.origin.x = (frame.origin.x > (260 - mouth_handle.frame.size.width)) ? (260 - mouth_handle.frame.size.width) : frame.origin.x;
frame.origin.y = (frame.origin.y < 300) ? 300 : frame.origin.y;
frame.origin.y = (frame.origin.y > 377) ? 377 : frame.origin.y;
if(frame.origin.x - prevDistanceX > 2 && frame.origin.x - prevDistanceX < -2)
frame.origin.x = prevDistanceX;
if(frame.origin.y - prevDistanceY > 2 && frame.origin.y - prevDistanceY < -2)
frame.origin.y = prevDistanceY;
prevDistanceX = frame.origin.x;
prevDistanceY = frame.origin.y;
CGFloat handleWidth = mouth_handle.frame.size.width;
if([touches count] == 2) {
NSArray *twoTouches = [touches allObjects];
UITouch *first = [twoTouches objectAtIndex:0];
UITouch *second = [twoTouches objectAtIndex:1];
CGFloat currentDistance = distanceBetweenPoints([first locationInView:mouth_handle],[second locationInView:mouth_handle]);
handleWidth = mouth_handle.frame.size.width + (currentDistance - initialDistance);
handleWidth = (handleWidth < 60) ? 60 : handleWidth;
handleWidth = (handleWidth > 150) ? 150 : handleWidth;
if(initialDistance == 0) {
initialDistance = currentDistance;
}
initialDistance = currentDistance;
}
mouth_handle.frame = CGRectMake(frame.origin.x, frame.origin.y, handleWidth, 15);
}
Qualche idea su come rendere questa più agevole?
Soluzione
Per saltare tra le dita, vuoi dire che non è possibile distinguere tra il primo e il secondo dito?
Quello che vorrei fare è calcolare l'angolo tra le dita. Con l'angolo voglio dire che se si desidera disegnare un cerchio con un solo tocco, come il centro e l'altro sul bordo del cerchio, si potrebbe determinare l'angolo tra il punto di destra sopra il primo tocco e il secondo tocco. Se la differenza angolare tra due eventi è più grande di .5Pi (1/4 cerchio) si può assumere i tocchi ricevuti accesi e si potrebbe correggere per questo.
Spero che tu capisca cosa voglio dire.
Altri suggerimenti
È possibile farlo utilizzando un UIScrollView; è costruito in quella direttamente.