Попытка заставить UIImageView перестать двигаться, когда он попадает в границы экрана ... помогите! - PullRequest
1 голос
/ 19 декабря 2009

Я делаю простое игровое приложение, в котором вы нажимаете левую / правую кнопку, а UIImageView перемещается и анимируется. Вот проблема - я хочу, чтобы UIImageView прекратил двигаться, когда он касается


self.view.bounds.size.width

Как мне это сделать?

Вот существующий код:


    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if([touch view] == rightbutton){
 NSLog(@"touch rightbutton");
 player.animationImages = [NSArray arrayWithObjects:
         [UIImage imageNamed:@"linkr1.png"],
         [UIImage imageNamed:@"linkr2.png"],
         [UIImage imageNamed:@"linkr3.png"],
         [UIImage imageNamed:@"linkr4.png"],
         [UIImage imageNamed:@"linkr5.png"],
         [UIImage imageNamed:@"linkr6.png"],
         [UIImage imageNamed:@"linkr7.png"],
         [UIImage imageNamed:@"linkr8.png"],
         nil];
 player.animationRepeatCount = 0;
 [self.view addSubview:player];
 [player startAnimating];  
 rightbuttontimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(rightrepeater) userInfo:nil repeats:YES];
}
if([touch view] == leftbutton){
 NSLog(@"touch leftbutton");
 player.animationImages = [NSArray arrayWithObjects:
        [UIImage imageNamed:@"linkr1l.png"],
        [UIImage imageNamed:@"linkr2l.png"],
        [UIImage imageNamed:@"linkr3l.png"],
        [UIImage imageNamed:@"linkr4l.png"],
        [UIImage imageNamed:@"linkr5l.png"],
        [UIImage imageNamed:@"linkr6l.png"],
        [UIImage imageNamed:@"linkr7l.png"],
        [UIImage imageNamed:@"linkr8l.png"],
        nil];
 player.animationRepeatCount = 0;
 [self.view addSubview:player];
 [player startAnimating]; 
 leftbuttontimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(leftrepeater) userInfo:nil repeats:YES];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 UITouch *touch = [[event allTouches] anyObject];
 if([touch view] == rightbutton){
  NSLog(@"let go of rightbutton");
  [rightbuttontimer invalidate];
  [player stopAnimating];
 }
  if([touch view] == leftbutton){
  NSLog(@"let go of leftbutton");
  [leftbuttontimer invalidate];
   [player stopAnimating];
 }
}

- (void)rightrepeater {

 CGPoint center = (CGPoint)[player center]; 
 center.x += 10; 
 [player setCenter:center];

}

- (void)leftrepeater {

 CGPoint center = (CGPoint)[player center]; 
 center.x += -10; 
 [player setCenter:center];

}

Любая помощь будет оценена. Спасибо!

1 Ответ

1 голос
/ 19 декабря 2009

В вашем rightRepeater методе:

- (void)rightrepeater {
    CGPoint center = (CGPoint)[player center];
    center.x += 10;
    CGFloat rightEdge = center.x + [player width]/2;
    if (rightEdge > view.bounds.size.width) {
        center.x -= (rightEdge - view.bounds.size.width);
    }
    [player setCenter:center];
}

И, аналогично, в вашем leftRepeater методе:

- (void)leftrepeater {
    CGPoint center = (CGPoint)[player center]; 
    center.x -= 10;
    CGFloat leftEdge = center.x - [player width]/2;
    if (leftEdge < 0) {
        center.x -= leftEdge;
    }
    [player setCenter:center];
}

Обратите внимание, что я использовал [player width], чтобы получить ширину каждого игрока. Я не уверен, существует ли такой метод, но этого должно быть достаточно, чтобы проиллюстрировать концепцию.

...