цель-C Touch-события - PullRequest
       2

цель-C Touch-события

3 голосов
/ 17 октября 2010

Я получил набор изображений и хотел бы знать, к чему я прикоснулся.Как я мог реализовать это ...?Чтобы быть более точным: "Home-Class" будет создавать пару классов Image:

Image *myImageView = [[Image alloc] initWithImage:myImage];

Класс изображений выглядит примерно так:

- (id) initWithImage: (UIImage *) anImage 
{
    if ((self = [super initWithImage:anImage])) 
    {
        self.userInteractionEnabled = YES;
    }
    return self;
}

позже,Я использую эти методы touch-event также в классе Image:

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

Моя проблема на данный момент: методы touchesBegan / Ended будут запущены независимо от того, где я касался экрана, но я бы хотелчтобы выяснить, какое из изображений было затронуто .....

Ответы [ 2 ]

3 голосов
/ 18 октября 2010

При каждом касании вы проверяете, происходит ли это касание между областью изображения.Вот пример кода, предположим, у вас есть объект UIImage с именем img.

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];

    CGPoint location = [touch locationInView:self.view];

    if (location.x >= img.x && location.x <= img.x && location.y >= img.y && location.y <= img.y) {
        // your code here...
    }


}
1 голос
/ 23 июля 2012

Внутри вашего * .h (интерфейсного) файла:

@interface MyViewController : UIViewController{
IBOutlet UIImageView *imageViewOne;
IBOutlet UIImageView *imageViewTwo;
UIImageView * alphaImage;
}
-(BOOL)isTouch:(UITouch *)touch WithinBoundsOf:(UIImageView *)imageView;

Поместите компоненты UIImageView на *. Xib и свяжите их с imageViewOne 'imageViewTwo' с использованием «Владелец файла» .

Перейдите к файлу * .m (реализация) и:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   UITouch *touch = [touches anyObject];

   if ([self isTouch:touch WithinBoundsOf:imageViewOne])
   {
      NSLog(@"Fires first action...");
   }
   else if([self isTouch:touch WithinBoundsOf:imageViewTwo]){
      NSLog(@"Fires second action...");
   }
}

//(Optional 01) This is used to reset the transparency of the touched UIImageView
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
   [alphaImage setAlpha:1.0];
}

-(BOOL)isTouch:(UITouch *)touch WithinBoundsOf:(UIImageView *)imageView{

   CGRect _frameRectangle=[imageView frame];
   CGFloat _imageTop=_frameRectangle.origin.y;
   CGFloat _imageLeft=_frameRectangle.origin.x;
   CGFloat _imageRight=_frameRectangle.size.width+_imageLeft;
   CGFloat _imageBottom=_frameRectangle.size.height+_imageTop;

   CGPoint _touchPoint = [touch locationInView:self.view];

   /*NSLog(@"image top %f",_imageTop);
   NSLog(@"image bottom %f",_imageBottom);
   NSLog(@"image left %f",_imageLeft);
   NSLog(@"image right %f",_imageRight);
   NSLog(@"touch happens at %f-%f",_touchPoint.x,_touchPoint.y);*/

   if(_touchPoint.x>=_imageLeft &&
      _touchPoint.x<=_imageRight &&
      _touchPoint.y>=_imageTop &&
      _touchPoint.y<=_imageBottom){

      [imageView setAlpha:0.5];//optional 01 -adds a transparency changing effect
      alphaImage=imageView;//optional 01 -marks the UIImageView which deals with the   transparency changing effect for the moment.

      return YES;
    }else{
      return NO;
    }
 }

Этокак я справился с этим.Мне пришла в голову мысль, прочитав пост «своего кода».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...