2014-01-26 1 views
2

Я выполнил то, что делает следующее:Создание перемещаемой UIView на длинной прессе иной точки зрения

Я показывает полный экран UICollectionView с различными элементами. Под этим видом (вне поля зрения) есть «подробный» вид для одного из элементов.

Когда пользователь нажимает один из элементов UICollectionView, я хотел бы скрыть UICollectionView, чтобы открыть «деталь».

Затем я создам новый UIView, который витает над этим видом и перетаскивается. Затем пользователь может перетащить этот новый UIView в положение на экране «detail».

Единственная часть, с которой у меня возникают проблемы, - это синхронизация длинного нажатия с перетаскиваемым видом. Я хотел бы, чтобы пользователь долго нажимал на UICollectionView, а затем сразу же перетаскивал перетаскиваемый вид.

Как подключить эти два действия?

На данный момент UICollectionView вызывает делегат на нижней точку зрения, что инстанцирует перетаскиваемый вид:

- (void)contactAlgorithm:(ContactAlgorithmViewController *)contactFlowViewController didLongPressContact:(CDContact *)contact {  
DraggableContactView *draggableView= [[DraggableContactView alloc] initWithContact:contact]; 
[self.view addSubview:draggableView.view]; 

}

Но как мне сделать это перемещаемый просмотр представления, которое тащит по long.press?

enter image description here enter image description here

ответ

2

Сначала получите кадр элемент, который долгое время нажатия. Добавьте перетаскиваемый вид именно в этот кадр.

Теперь добавьте распознаватель жесты жеста в этот вид и установите делегат этого же жестов viewController, и всякий раз, когда происходит перемещение, вызывается метод делегата. Измените рамку перетаскиваемого вида, чтобы следить за прикосновением.

Вместо того, чтобы добавить жест жеста, вы можете использовать touchhesMoved метод viewController.

КОД:
используя ниже коды, вы можете перетащить вид без использования жеста панорамирования. Метод

//have a class property of DraggableContactView 
@implementation ViewController{ 

    DraggableContactView *dragableView; 
} 

Селектор longPressGestureRecogniser

-(void)longPress:(UILongPressGestureRecognizer *)ges{ 

    if(dragableView==nil){ 
     dragableView=[[DraggableContactView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
     dragableView.backgroundColor =[UIColor greenColor]; 
     [self.view addSubview:dragableView]; 
    } 
    CGPoint p =[ges locationInView:self.view]; 
    [dragableView setCenter:p]; 
} 
+0

Да! У меня это все уже есть. Мне нужно знать, как подключить длительное нажатие на пользовательском представлении к перетаскиваемому UIView. Я обновил свой ответ выше с помощью кода делегата, который я использую. – theDuncs

+0

ОК, редактирование ответа. – santhu

+0

Спасибо, Санту! Как мне изменить рамку перетаскиваемого вида, чтобы следить за ней? – theDuncs

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