У вас правильная идея. Вы бы использовали UIPanGestureRecognizer
для обновления frame
представления. Имейте в виду, что у вас должно быть что-то, что пользователь всегда будет «тянуть» на видимое - я не думаю, что вы сможете полностью скрыть вид за экраном.
Примерно так будет в реализации объекта, который вы выбираете для обработки событий из вашего распознавателя жестов (в этом примере предполагается, что это ваш контроллер представления):
- (void)handleDrag:(UIPanGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateChanged ||
gesture.state == UIGestureRecognizerStateEnded) {
CGPoint translation = [gesture translationInView:self.view];
CGRect newFrame = historyView.frame;
newFrame.origin.x = newFrame.origin.x + translation.x;
newFrame.origin.y = newFrame.origin.y + translation.y;
historyView.frame = newFrame;
// you need to reset this to zero each time
// or the effect stacks and that's not what you want
[gesture setTranslation:CGPointZero inView:self.view];
}
}