Je veux faire pivoter le uiimageview également mettre à l'échelle la vue de l'image alors comment puis-je détecter le geste tactile que l'utilisateur est en train de mettre à l'échelle ou l'utilisateur?détecter faire pivoter le geste et l'échelle iphone sdk
0
A
Répondre
1
Depuis iOS 3.2, Apple introduit l'utilisation de UIGestureRecognizer
. Les deux qui vous intéresseraient sont UIPinchGestureRecognizer
et UIRotationGestureRecognizer
. Pour utiliser un geste de pincement, vous pouvez effectuer les opérations suivantes:
- (void)viewDidLoad {
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
[imageView addGestureRecognizer:pinch];
[pinch release];
}
- (void)handlePinchGesture:(UIGestureRecognizer *)sender {
NSLog(@"New Scale: %f", sender.scale);
}
Vous pourriez faire quelque chose de similaire pour le UIRotationGestureRecognizer
alors.
0
dans votre fichier viewcontroller.h notez les annonces
IBOutlet UIImageView *imgRotate;
CGFloat lastScale;
CGFloat lastRotation;
maintenant dans votre fichier viewcontroller.m écrire le code ci-dessous,
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[imgRotate addGestureRecognizer:pinchRecognizer];
UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[imgRotate addGestureRecognizer:rotationRecognizer];
}
-(void)scale:(id)sender
{
if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
{
lastScale = 1.0;
return;
}
CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);
CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];
[imgRotate setTransform:newTransform];
lastScale = [(UIPinchGestureRecognizer*)sender scale];
}
-(void)rotate:(id)sender
{
if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
{
lastRotation = 0.0;
return;
}
CGFloat rotation = 0.0 - (lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);
CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
[[(UIRotationGestureRecognizer*)sender view] setTransform:newTransform];
[imgRotate setTransform:newTransform];
lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if ([touch view] == imgRotate) {
CGPoint location = [touch locationInView:self.view];
imgRotate.center = location;
}
}
Comment puis-je échelle imageview? je veux dire comment puis-je obtenir des points? –
NSLog (@ "Nouvelle échelle:% f", sender.scale); Il donne également une erreur lors de la compilation comme ceci "erreur: demande de membre 'échelle' dans quelque chose pas une structure ou union" –
Je veux le faire sans utiliser UIGestureRecognizer est-il un moyen de faire les deux sur TouchMoved? –