4

UILable Drag В UIView кадр Не в UIImageView рамки Я использую следующий код для дрэг звукозаписывающей компанией с использованием UIPanGestureRecognizerDrag UILable только UIImageView кадра Использование UIPanGestureRecognizer

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture1:)]; 
    [panGesture setMinimumNumberOfTouches:1]; 
    [self.imageView setBounds:CGRectMake(self.imageView.frame.origin.x,self.imageView.frame.origin.y ,self.imageView.frame.size.width, self.imageView.frame.size.height)]; 
    [panGesture setMaximumNumberOfTouches:1]; 
    panGesture.delegate=self; 
    [title addGestureRecognizer:panGesture]; 
    panGesture = nil; 

И мой метод действия

-(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); 

    [[sender view] setCenter:translatedPoint]; 
} 
+0

Почему вы заходящий 'panGesture = ноль,' при добавлении к наклейке? это заставит указатель жесты панорамы получить 'nil', это недопустимый подход. (Я предполагаю, что вы думаете о не-ARC) Плюс, в чем вопрос снова? –

+0

Я новичок в ios, но попробую без panGesture = nil; но выдайте то же самое мое перетаскивание lile в uiview не только uiimageview –

+0

Это потому, что вы должны каким-то образом ограничить движение за пределами 'UIImageView'. например Вы можете выполнить Max или Min x, y после вычисления, прежде чем устанавливать позицию своего представления, чтобы позволить маркерам перемещаться только в желаемом виде. –

ответ

2

Ну, вы должны ограничить свои 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]; 
} 
+0

Я использую lable как subview в imageview, и я пробую этот код мое перетаскивание lable в x = 0 в uiview (в углу) исправить и не перемещаться по другим позициям –

+0

Я создал тестовый проект и протестировал свой код в действии. он работает безупречно, когда я удаляю строку '[self.imageView setBounds: CGRectMake (self.imageView.frame.origin.x, self.imageView.frame.origin.y, self.imageView.frame.size.width, self.imageView .frame.size.height)]; 'Я не уверен, почему вы задаете границы для просмотра изображений. Используйте второй пример кода и проиграйте эту строку, он должен быть исправлен. –

+0

Большое спасибо за его работу –

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