Ну, вы должны ограничить свои x, y, используя такие как:
CGFloat maxPossibleX = CGRectGetMaxX(self.imageView.frame) - (CGRectGetWidth(sender.view.bounds)/2.0f);
CGFloat maxPossibleY = CGRectGetMaxY(self.imageView.frame) - (CGRectGetHeight(sender.view.bounds) /2.0f);
CGFloat minPossibleX = CGRectGetMinX(self.imageView.frame) + CGRectGetMidX(sender.view.bounds);
CGFloat minPossibleY = CGRectGetMinY(self.imageView.frame) + CGRectGetMidY(sender.view.bounds);
CGFloat actualX = translatedPoint.x;
actualX= MAX(minPossibleX, actualX);
actualX = MIN(maxPossibleX, actualX);
CGFloat actualY = translatedPoint.y;
actualY= MAX(minPossibleY, actualY);
actualY = MIN(maxPossibleY, actualY);
translatedPoint = CGPointMake(actualX, actualY);
Я предполагаю, что ваш ярлык не является подвид вашего изображения. Если метка подтаблица из ImageView:
CGFloat maxPossibleX = CGRectGetMaxX(self.imageView.bounds) - (CGRectGetWidth(sender.view.bounds)/2.0f);
CGFloat maxPossibleY = CGRectGetMaxY(self.imageView.bounds) - (CGRectGetHeight(sender.view.bounds) /2.0f);
CGFloat minPossibleX = CGRectGetMidX(sender.view.bounds);
CGFloat minPossibleY = CGRectGetMidY(sender.view.bounds);
CGFloat actualX = translatedPoint.x;
actualX= MAX(minPossibleX, actualX);
actualX = MIN(maxPossibleX, actualX);
CGFloat actualY = translatedPoint.y;
actualY= MAX(minPossibleY, actualY);
actualY = MIN(maxPossibleY, actualY);
translatedPoint = CGPointMake(actualX, actualY);
Edit: Я успешно протестировал этот метод в тестовом проекте:
-(void)handlePanGesture1:(UIPanGestureRecognizer *)sender
{
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.imageView];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan)
{
firstX = [[sender view] center].x;
firstY = [[sender view] center].y;
}
translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);
CGFloat maxPossibleX = CGRectGetMaxX(self.imageView.bounds) - (CGRectGetWidth(sender.view.bounds)/2.0f);
CGFloat maxPossibleY = CGRectGetMaxY(self.imageView.bounds) - (CGRectGetHeight(sender.view.bounds) /2.0f);
CGFloat minPossibleX = CGRectGetMidX(sender.view.bounds);
CGFloat minPossibleY = CGRectGetMidY(sender.view.bounds);
CGFloat actualX = translatedPoint.x;
actualX= MAX(minPossibleX, actualX);
actualX = MIN(maxPossibleX, actualX);
CGFloat actualY = translatedPoint.y;
actualY= MAX(minPossibleY, actualY);
actualY = MIN(maxPossibleY, actualY);
translatedPoint = CGPointMake(actualX, actualY);
[[sender view] setCenter:translatedPoint];
}
Почему вы заходящий 'panGesture = ноль,' при добавлении к наклейке? это заставит указатель жесты панорамы получить 'nil', это недопустимый подход. (Я предполагаю, что вы думаете о не-ARC) Плюс, в чем вопрос снова? –
Я новичок в ios, но попробую без panGesture = nil; но выдайте то же самое мое перетаскивание lile в uiview не только uiimageview –
Это потому, что вы должны каким-то образом ограничить движение за пределами 'UIImageView'. например Вы можете выполнить Max или Min x, y после вычисления, прежде чем устанавливать позицию своего представления, чтобы позволить маркерам перемещаться только в желаемом виде. –