2011-02-17 3 views
11

Quelle est la meilleure façon d'effectuer un zoom avant ou arrière sur un UIView avec un simple bouton de méthode. (Eizoom avant et arrière d'un UIView

(IBAction)zoomin:(int)distance 
{ 
method here 
} 
(IBAction)zoomout:(int)distance 
{ 
and here 
} 

Répondre

25

Il peut être fait en utilisant deux gestes doigt reconnaisseur: Vous devez simplement écrire: -

-(void)viewDidLoad 
{ 
UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] 
              initWithTarget:self 
              action:@selector(twoFingerPinch:)] 
              autorelease]; 

[[self view] addGestureRecognizer:twoFingerPinch]; 
} 

par ce que vous avez initialisé une instance qui prendra soin de deux sensations de doigts sur l'écran (ou vue sur laquelle vous appliquez cette méthode) définir maintenant ce qu'il faut faire si vous avez reconnu les deux doigts:

- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer 
{ 
    NSLog(@"Pinch scale: %f", recognizer.scale); 
    CGAffineTransform transform = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale); 
             // you can implement any int/float value in context of what scale you want to zoom in or out 
    self.view.transform = transform; 
} 

T il méthode ci-dessus défini est automatiquement appelée non par les actions UIButton mais il permettra de résoudre votre problème avec la simplicité Si vous voulez strictement utiliser le zoom à IBAction puis il suffit de faire ceci:

-(IBAction)methodCalledOnClickingUIButton:(id)sender 
{ 
    if(sender==zoomInButton) 
    { 
     scaleValue++; 
    } 
    else if(sender==zoomOutButton) 
    { 
     scaleValue--; 
    } 
    CGAffineTransform transform = CGAffineTransformMakeScale(scaleValue,scaleValue); 
    self.view.transform = transform; 
} 

Où scaleValue est une valeur flottante .. Vous pouvez configurer ceci en fonction de vos exigences d'application! J'espère que cela fonctionnera bien pour vous! :)

+1

Votre réponse est excellente, mais cela ne fonctionne pas en douceur: chaque fois que vous arrêtez de zoomer - geste de pincement, aucun état n'est sauvegardé et il remet la valeur de recognizer.scale à 0: ainsi, le zoom commencera dès le début à chaque arrêt de la pince. . . . –

+0

Je veux zoomer mais la hauteur/largeur ne peut pas augmenter mais la vue devrait être zoomée. C'est possible? –

1

Swift 3, 4+

// Détecter zoom avant/arrière par deux doigts pour UIView, ici par exemple écouter sur la vue principale (vue)

//override func viewDidLoad() { 

    var pinchGesture = UIPinchGestureRecognizer() 
    pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchedView)) 
    view.isUserInteractionEnabled = true 
    view.addGestureRecognizer(pinchGesture) 

//} 

// Listener

@objc func pinchedView(sender:UIPinchGestureRecognizer){ 
    if(sender.scale > 1){ 
     print ("Zoom out") 
    }else{ 
     print("Zoom in") 
    } 
} 
Questions connexes