2010-07-12 5 views

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

Comment puis-je échelle imageview? je veux dire comment puis-je obtenir des points? –

+0

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" –

+0

Je veux le faire sans utiliser UIGestureRecognizer est-il un moyen de faire les deux sur TouchMoved? –

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; 
} 
}