web-dev-qa-db-fra.com

Événement tactile UIImageView

Je veux appeler mon événement de clic de bouton tout en touchant l'uiimageview nommée (image1) .Imageview placée dans uiview (view1).

Voici mon code:

- (IBAction)buttonClicked:(id)sender
{

 myTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(alphabutt:) userInfo:nil repeats:NO];
 }


-(IBAction)alphabutt:(id)sender
{
 NSLog(@"alphabutt!");


 if(i==1)
 {
  NSLog(@"i==1");
  [image1 setImage:[UIImage imageNamed:@"appleimg.jpg"]];
  [view1 addSubview:image1];  
  transition1 = [CATransition animation];

  transition1.duration = 0.75;

  transition1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

  transition1.type=kCATransitionReveal;
  transition1.subtype=kCATransitionFromRight;
  transitioning = YES;
  transition1.delegate = self;
  [image1.layer addAnimation:transition1 forKey:nil];  
 }
 if(i==2)
 {
  NSLog(@"i==2");
  [image1 setImage:[UIImage imageNamed:@"boatimg.jpg"]];
  [view1 addSubview:image1];  
  transition2 = [CATransition animation];

  transition2.duration = 0.75;

  transition2.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

  transition2.type=kCATransitionFade;
  transition2.subtype=kCATransitionFromRight;
  transitioning = YES;
  transition2.delegate = self;
  [image1.layer addAnimation:transition2 forKey:nil];

  i=0;
 }
i++;

}

Ce qui précède est mon code en cliquant sur le bouton, l'événement clickclicked est appelé. animation quand je touche l'uiimageview (image1) alors seulement elle appelle l'événement de clic de bouton (alphabutt). comment puis-je écrire l'événement tactile pour l'imageview ...

Veuillez expliquer brièvement avec du code pour effectuer l'événement tactile uiimageview ...

34
Renya

vous pouvez utiliser UITapGestureRecognizer ajouté au UIImageView via addGestureRecognizer

extraits:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bannerTapped:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[iv addGestureRecognizer:singleTap];
[iv setUserInteractionEnabled:YES];

et

- (void)bannerTapped:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"%@", [gestureRecognizer view]);
}
60
Tek Yin

Activez l'interaction utilisateur de votre vue d'image dans le xib (ou via le code si vous l'ajoutez par programme) et utilisez les méthodes UIResponder touchesBegan, touchesMoved, touchesEnded etc. pour détecter le toucher sur la vue d'image:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];

    if ([touch view] == yourImageView)
    {
            //add your code for image touch here 
    }

}
56
Swapnil Luktuke

Ici, je vous montre deux possibilités pour y parvenir en Swift:

Première possibilité

import UIKit

class ViewController: UIViewController {
    @IBOutlet var myUIImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // You can also manually set it through IB 
        // selecting the UIImageView in the storyboard
        // and checking "User Interaction Enabled" checkbox 
        // in the Attributes Inspector panel.
        self.myUIImageView.userInteractionEnabled = true
    }

    // You can choose to use one of the UIResponder methods:
    // touchesBegan, touchesMoved, touchesEnded etc, in order to detect the touch
    // on the UIImageView.
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
       let touch: UITouch? = touches.first
       if touch?.view == myUIImageView {
          println("myUIImageView has been tapped by the user.")
       }
       super.touchesEnded(touches, withEvent: event)
    }
}

Deuxième possibilité

import UIKit

class ViewController: UIViewController {
    @IBOutlet var myUIImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let singleTap = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:")
        singleTap.numberOfTapsRequired = 1 // Initialized to 1 by default
        singleTap.numberOfTouchesRequired = 1 // Initialized to 1 by default
        self.myUIImageView.addGestureRecognizer(singleTap)
        self.myUIImageView.userInteractionEnabled = true
    }

    func myUIImageViewTapped(recognizer: UITapGestureRecognizer) {
        if(recognizer.state == UIGestureRecognizerState.Ended){
            println("myUIImageView has been tapped by the user.")
        }
    }
}
13
King-Wizard

Vous pouvez également faire glisser et déposer un objet UIButton sur le UIImageView. Ensuite, dans l'éditeur de storyboard, il suffit de rendre le UIButton de Custom type, rendant le UIButton invisible. Gérez ensuite l'événement click comme vous le feriez pour n'importe quel bouton.

6
cevaris