Je suis d'avis que je voudrais que l'utilisateur tourne autour de son centre, en tapant et tenant quelque part et juste bouger son doigt.Comment dois-je interagir avec la géométrie d'un UIView, sans tenir compte des transformations appliquées?
J'ai toute la géométrie élaborée; Ce que je fais est de stocker l'angle de contact initial par rapport au centre comme offsetAngle, alors ma méthode touchesMoved ressemble à ceci:
- (void) touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event {
self.transform = CGAffineTransformMakeRotation(0);
CGPoint location = [[touches anyObject] locationInView: self];
CGPoint actualCenter = [self convertPoint: self.center fromView: self.superview];
CGPoint relativeTouch = [MathHelper translatePoint:location relativeTo: actualCenter];
CGPoint zero = CGPointMake(0, 0);
float angle = [MathHelper getAngleForPoint:zero andPoint:relativeTouch];
self.transform = CGAffineTransformMakeRotation(offsetAngle-angle);
}
Le bit laid est la première ligne, où je dois rétablir la rotation afin d'obtenir les positions d'événement correctes dans la vue. Si je ne fais pas cela, alors les emplacements sautent partout car il n'y a pas de continuité, puisque la vue tourne ...
Un autre problème est quand vous voulez manipuler le cadre d'une vue (par exemple en le déplaçant vers le bas) , lorsque la vue a une transformation appliquée:
- (IBAction)toggleSettingsView {
BOOL state = [settingsSwitch isOn];
float height = optionsView.bounds.size.height;
CGRect polygonFrame = polygonView.frame;
[UIView beginAnimations:@"advancedAnimations" context:nil];
[UIView setAnimationDuration:0.3];
if (state) {
optionsView.alpha = 1.0;
polygonFrame.origin.y += height;
} else {
optionsView.alpha = 0.0;
polygonFrame.origin.y -= height;
}
polygonView.frame = polygonFrame;
[UIView commitAnimations];
}
Cela déforme considérablement la vue.
Je dois mentionner que les deux CGTransform et la transformation CALayer ont le même effet. Cela sent comme si je fais quelque chose de mal, mais je ne sais pas ce que je devrais faire.