Это зависит от того, как дорожка определена программно, но если у вас есть CGPath, который представляет ее, или вы можете ее использовать, вы можете использовать CGPathContainsPoint в методе touchesMoved и отказаться от обновления позиции шара, если вне пути.