2015-09-13 4 views
0

Точно так же, как navigationController?.hidesBarsOnTap = true скрывает панель навигации, как скрыть обычные элементы пользовательского интерфейса, такие как кнопки, метки и т. Д. С краном вида? Я создал программу просмотра PDF с нуля, и теперь мне нужен метод, который будет скрывать элементы пользовательского интерфейса в представлении с помощью крана, точно так же, как приложение «Фотографии» на iPhone.Как скрыть элементы пользовательского интерфейса на кране представления, используя swift?

Вот код, который я пытался использовать, но никакого успеха:

override func viewDidAppear(animated: Bool) { 
     var dismissTap = UITapGestureRecognizer(target: self, action: Selector("dismissViewElements:")) 

     self.view.addGestureRecognizer(dismissTap) 

    } 

    func dismissViewElements(gesture: UITapGestureRecognizer){ 
     if gesture.state == UIGestureRecognizerState.Began { 
      self.backButton.alpha = 0 
     } 
    } 

Любые предложения не были бы очень полезны.

ответ

1

Я думаю, что понимаю, чего вы хотите. При нажатии на представление вы хотите скрыть кучу «инструментов» (кнопки редактирования и т. Д.). Приложение, которое приходит на ум, - это приложение для просмотра фотографий, которое поставляется с iPhone, когда вы нажимаете один раз, кнопки редактирования/обрезания/возврата и т. Д. ... все скрывается.

Самый простой способ сделать это (на мой взгляд) - добавить все эти элементы управления ui в родительский вид на отдельный «слой». и этот слой будет верхним. Когда пользователь удаляет это представление (пока его не кнопка или что-то внутри родительского вида), вид исчезает (вместе со всеми его дочерними кнопками/элементами управления и т. Д.)

Я лично использовал бы штрихи, потому что это действительно легко реализуется.Вот что метод touchesEnded должен выглядеть (более или менее)

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 
     self.hidden = true 
     //where parentView is the parent view, whatever you named it 
    } 

, и вы должны быть все в порядке, я думаю

также, я забыл упомянуть, вы должны создать подкласс UIView и имеют touchesEnded внутри этого частности осуществление UIView и в раскадровке, вы можете нажать на UIView, что вы используете в качестве родителя, и дать ему типа классового, что вы назвали подкласс

Я толкнул вверх быстрый проект для вас на github для иллюстрации идеи


Update - сделать элементы появляются снова

вы можете сделать что-то очень похожее. Имейте родителя UIVIew, с ребенком UIVIew внутри него, и все кнопки/инструменты внутри ребенка UIView. Таким образом, на touchesEnded родителя UIView вы можете скрыть ребенка UIView и на touchesEnded снова завести ребенка UIView снова. все, что вам нужно сделать внутри touchesEnded заключается в следующем:

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { 
      childUiView.hidden = !childUiView.hidden 
     } 

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

+0

Этот метод помогает им исчезнуть при кране, но как мне заставить их снова появиться на кране, а также –

+0

вы можете сделать что-то очень похожее. Имейте родительский 'UIVIew', с дочерним' UIVIew' внутри него и все кнопки/инструменты внутри дочернего 'UIView'. Таким образом, на 'touchesEnded' родительского' UIView' вы можете скрыть дочерний 'UIView' и на' touchesEnded' снова заново создать дочерний 'UIView'. все, что вам нужно сделать внутри 'touchesEnded', следующее:' childUiView.hidden =! childUiView.hidden; 'таким образом, каждый раз, когда вы прикасаетесь к нему, он присваивает' hidden' противоположность тому, что было. Я также обновлю ответ –

0

Вы должны добавить Tap gesture recognizer к вашему изделию, а затем сделать выход/действие. В этом действии вы устанавливаете альфа-или скрытое свойство.

+0

, но как должен выглядеть код, например, если я хочу, чтобы закрыть кнопку на моем представлении с краном просмотра. –

+0

Вы когда-нибудь использовали приложение, которое отклоняет панель навигации и панель инструментов при нажатии на представление? в частности, приложения для чтения PDF/книг? ну, я хочу применить тот же самый метод удаления, но на обычных элементах пользовательского интерфейса, таких как кнопки, метки и т. д. Не панель навигации или панель инструментов –

0

Ваш вопрос ужасно расплывчатый/широкий. С какой частью вам нужна помощь? Что вы пробовали?

В самых общих чертах:

Создать водопроводная жест распознаватель. Прикрепите его к виду, которое вы хотите нажать. Попросите его вызвать метод в вашем контроллере вида. Назовем этот метод toggleControls:

Метод должен принять распознаватель жестов в качестве параметра.

Добавить элементы управления BoolAreHidden для вашего VC.

в методе toggleControls, переключите состояние элементов управленияAreHidden.

Напишите код, который показывает элементы управления, когда элементы управленияAreHidden == true, и скрывает их, когда элементы управленияAreHidden == false.

+0

Вы когда-нибудь использовали приложение, которое отклоняет панель навигации и панель инструментов с помощью крана Посмотреть? в частности, приложения для чтения PDF/книг? ну, я хочу применить тот же самый метод удаления, но на обычных элементах пользовательского интерфейса, таких как кнопки, метки и т. д. Не панель навигации или панель инструментов –

+0

. Какая часть этого вам нужна? Что вы пробовали? –

+0

Я попытался добавить tapGesture, добавив его как subView к моему представлению –

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