2013-09-10 4 views
0

У меня есть две кнопки, которые я удерживаю, и они перемещают изображение по экрану, влево или вправо, я хочу, чтобы изображение останавливалось на краю экрана, хотя и не могло двигаться дальше, я не понимаю, как добавить код для этого.Как добавить ограничения на координаты изображения

-(IBAction)Left:(id)sender{ 
    [MenuClick play]; 
    LeftTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(GoLeft) userInfo:nil repeats:YES]; 
    if (Left == nil) { 
     LeftTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(GoLeft) userInfo:nil repeats:YES]; 
    } 
} 

-(IBAction)StopLeft:(id)sender{ 
    [LeftTimer invalidate]; 
    LeftTimer = nil; 
} 

-(IBAction)Right:(id)sender{ 
    [MenuClick play]; 
    RightTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(GoRight) userInfo:nil repeats:YES]; 
    if (Right == nil) { 
     RightTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(GoRight) userInfo:nil repeats:YES]; 
    } 
} 

-(IBAction)StopRight:(id)sender{ 
    [RightTimer invalidate]; 
    RightTimer = nil; 
} 

-(void)GoLeft{ 
    Ship.center = CGPointMake(Ship.center.x -5, Ship.center.y); 
} 

-(void)GoRight{ 
    Ship.center = CGPointMake(Ship.center.x +5, Ship.center.y); 
} 

ответ

0

Отредактировано в базе на комментарии

- (void)moveLeft 
{ 
    CGPoint newCenter = ship.center; 

    if (CGRectGetMinX(ship.frame)-5 <= 0) 
    { 
     newCenter.x=ship.bounds.size.width/2.0; 
     [self stopLeft:nil]; 
    } 
    else 
    { 
     center.x-=5; 
    } 
    ship.center = newCenter; 
} 


- (void)moveRight 
{ 
    CGPoint newCenter = ship.center; 

    if (CGRectGetMaxX(ship.frame)+5 >= self.view.bounds.width) 
    { 
     newCenter.x=self.view.bounds.width-ship.bounds.size.width/2.0; 
     [self stopRight:nil]; 
    } 
    else 
    { 
     center.x+=5; 
    } 
    ship.center = newCenter; 
} 
+1

Это только движение корабля на 5 раз, а затем останавливается, когда кадр корабля будет пересекать границы вида. –

+0

Вы правы, я должен использовать: 'if (! CGRectContainsRect (self.view.bounds, ship.frame))' – Camo

+0

На самом деле это по-прежнему будет перемещать корабль за пределы экрана на 5, поскольку он устанавливает 'ship.center' прежде чем он выполнит проверку, что по сути является моим ответом, за исключением того, что он выполняет сам расчет, а не полагается на «CGRectContainsRect». –

1

Обновлять GoLeft и GoRight метод для проверки положения изображения против границ вида.

Предполагая self является UIViewController, представляющий экран ...

-(void)GoRight{ 
    CGPoint proposedOrigin = CGPointMake(Ship.center.x +5, Ship.center.y); 
    CGRect screenFrame = self.view.frame; 

    // The ship's origin + width gets the right-most point, 
    // compare this against the main view's width to determine 
    // whether or not it should be moved. 
    if (proposedOrigin.x + Ship.frame.size.width/2.0 < screenFrame.size.width) { 
     Ship.center = proposedOrigin; 
    } else { 
     [self StopRight:nil]; 
    } 
} 

Я оставлю это до вас, чтобы выяснить (проще) GoLeft изменения.

+1

Так как вы используете центр координат, а не в правом нижнем углу происхождения, она не должна быть Ship.frame.size.width/2,0? В противном случае половина изображения будет перемещена с правой стороны окна. – Mark

+0

@MarkThalman Хорошее место, обновлено :) –

Смежные вопросы