Drawapp — Создание приложения с помощью UIPanGestureRecognizer


Как добавить UIPanGestureRecognizer в форму, нарисованную на CAShapLayer — быстро?

У меня есть imageView, что я нарисовал синий слой в его слое. Я хотел бы, чтобы пользователь мог использовать, удерживать и перетаскивать этот синий круг в любом месте UIImageView. Я не уверен, как прикрепить эту форму к UIPanGestureRecognizer . Мое усилие до сих пор ниже:

Как вы могли заметить, вы не можете добавить GestureRecognizers в CALayers. Они могут быть добавлены только в типы UIView.

Решение состоит в том, чтобы добавить subview в ваше изображение и нарисовать синий круг.

используйте этот код для перемещения

если вы хотите программно добавить UIPanGestureRecognizer :

Drawapp — Создание приложения с помощью UIPanGestureRecognizer

Во многих приложениях используется выдвижная панелька под названием Navigation Drawer. Все ее видели, но не все знают, что она именно так называется. Использование Navigation Drawer дает приложению большую удобность в использовании, расширяет функционал, а также придает Android приложению более современный вид и стиль. Но не взирая на массовое распространенное использование этой штуки, толковых уроков по ее использованию не так много, а само использование Navigation Drawer не такое уж и простое и требует определенной работы. Этот урок я делаю на базе толкового урока с Хабра, имея желание его как то обобщить, упростить и представить в более доступной и ясной форме (не гарантирую, что так и будет).

Пример Navigation Drawer в приложении Q uickMemo :

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

Создаем новый проект, выбираем Blank Activity, минимальную версия Android я выберу 4+.

Сразу скачайте и поместите в соответствующие папки в drawable необходимые изображения для панели.

Начнем с работы над файлом activity_main.xml. В нем нам нужно создать специальный DrawerLayout и в нем поместить область FrameLayout для отображения выдвижной панели, а также список ListView, из которого и будет состоять Navigation Drawer. Для этого добавляем в файл следующий код:

Все строковые элементы мы создадим под конец.


Для определения вида каждого отдельного пункта списка панели, создадим отдельный файл в папке layout под названием nav_draw.xml и добавим следующее:

В качестве фона для созданного выше элемента TextView мы используем xml файл из папки drawable. Давайте его создадим. В папке drawable создаем файл под названием activated_background.xml и добавим в него следующий код:

Здесь мы активно используем ссылку на синий цвет, пока еще не существующий в приложении. Чтобы его создать, в папке values создаем файл по имени color.xml и добавляем в него код:

Изменим меню приложения, изменив код в файле menu_main.xml в папке menu:

Что касается кода приложения, то в нем необходимо реализовать такие основные моменты:

— инициализировать все используемые объекты и переменные;

— задать поведение переключателю панели Navigation Drawer;

— настроить переход на необходимый фрагмент при выборе соответствующего пункта списка панели;

Код файла java класса должен выглядеть вот так (кликаем ссылку) MainActivity.java.

Чтобы приложение заработало, осталось доработать в нем фрагменты для перехода на них с Navigation Drawer и добавить все используемые строки. Чтобы реализовать фрагменты, создаем в проекте новый пакет под названием fragments и в нем создаем 3 класса по имени ScreenOne, ScreenTwo, ScreenThree:

Код во всех троих классах одинаков, за исключением xml файла интерфейса. Код для ScreenOne.java:

Для настройки интерфейса этого класса мы ссылаемся на файл под названием screen_first, давайте его создадим. В папке layout создаем файл под названием screen_first.xml и добавим в него код:

Классы (кликаем ссылку) ScreenTwo , ScreenThree аналогичны первому ScreenOne, единственное отличие в строке ссылки на файл интерфейса:

Для второго и третьего фрагментов в папке layout нужно создать интерфейса файлы screen_second.xml и screen_third.xml, которые выглядят аналогично к тому же screen_first.xml с единственным отличием в ссылке на текстовый ресурс:


Остается только внести все используемые в проекте строковые ресурсы в файл strings.xml :

Теперь можем рискнуть протестировать приложение. Запускаем проект и смотрим на результат:

Все работает исправно, а мы научились создавать красивую и полезную выдвижную панель Navigation Drawer.

ios — Плавная анимация с использованием drawRect: и UIPanGestureRecognizer

ОК. Я видел много тем, которые похожи на то, что я пытаюсь сделать здесь, но ничего, что вполне соответствует. Может быть, мой подход отходит от базы. Здесь сделка.

Я рисую диаграмму для моего подкласса UIView в drawRect :. Затем я использую UIPanGestureRecognizer для перевода смещения диаграммы (внутреннего, а не в иерархию представлений) вправо/влево. Это отлично работает, но моя проблема заключается в том, что действие распознавателя запускается с относительно низкой частотой. В частности, результирующее панорамирование MUCH choppier, чем, скажем, в scrollview или tableview. В частности, когда число точек в моей диаграмме увеличивается. Теперь то, что мне было бы интересно сделать, — это не на самом деле триггер рисовать из действия жестов, но есть таймер, стреляющий примерно в 30 раз в секунду, интерполируя смещение с момента, когда кастрюля загорелась до текущего момента. Однако это становится все более сложным.

Цукерберг рекомендует:  Обучение - Современное обучение

У кого-нибудь есть предложения? Должен ли я просто делать это с помощью UIScrollView? Причина, по которой я бы предпочел не то, чтобы данные могли распространяться довольно далеко в любом направлении, и я бы не хотел рисовать (или, по крайней мере, хранить) весь путь сразу, а просто сделать раздел, который в настоящее время отображается. Должен ли я использовать CAShapeLayer? Я хотел бы получить какой-то вклад, прежде чем я проведу еще один день с этими возможностями.

Любой вход или опыт будут приветствоваться большинством.

    4 1
  • 8 апр 2020 2020-04-08 07:55:36
  • samson

1 ответ


Итак, в конце концов, я DID в конечном итоге положить эти вещи в UIScrollView. Мне пришлось сделать немало работы, чтобы запустить это, сложная часть — создание серии PANES, которая будет добавлена в scrollview. Каждая панель запрашивает делегата для данных, которые ему нужно нарисовать, а затем все они сшиты вместе. К счастью, все отлично поработало, когда я разместил эти прокрутки, содержащие панели диаграмм, в виде таблицы. Все еще не занимались масштабированием, но я видел здесь несколько сообщений, которые должны сделать его относительно тривиальным.

Так что ответ на мой оригинальный вопрос. НЕ пытайтесь кастрюлю и нарисовать на каждом кадре, это будет изменчиво, и если вы отбросите какой-то настоящий хак, нет хорошего способа найти его, чтобы сгладить его. Прокрутка позволяет обрабатывать все эти проблемы для вас, если вы можете легко разделить свой вид. Думаю, я мог бы использовать один длинный вид, но потом, когда набор данных станет большим, у меня проблемы.

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

Добавление UIPanGestureRecognizer вновь созданного UIView, и заменить текущий вид с горкой

Я прочитал почти каждый пост я могу найти на этом сайте. Я нашел несколько очень полезных постов, но не совсем нашел, как решить мою проблему. Я пытаюсь создать springboardish просмотра изображений, были пользователь может скользить следующее изображение на место, но останавливаться на полпути, хотя и вернуться назад. Я читал на многочисленных сообщений о том, что PanGestureRecognizer это путь, но был с очень трудное время с ним.

В раскадровке, я создал свой ViewController и добавил PanGestureRecognizer к ViewController и добавил действие.

Это показывает следующее изображение на сковороде, но тогда нет PanGestureRecongizer на новом View, который загружается. Я подумал, что, когда я добавил PANGesture в раскадровке, было бы сделать его доступным для всех видов в ViewController.

Это может быть отдельный вопрос, но как я могу получить анимацию для работы на PanGesture? Я был неправильно (очевидно) под впечатлением, что Пан бы сделать слайд в действии.

Лучший возможный способ добавить Instagram как руководство по макету с UIPinchGestureRecognizer UIRotationGestureRecognizer & UIPanGestureRecognizer?

Я использовал UIPinchGestureRecognizer UIPanGestureRecognizer & амп; UIRotationGestureRecognizer с помощью UILabel для достижения instagram , как функция масштабирования и перетаскивания, но теперь я хотел бы показать guid макета, например, когда UILabel перетащить в центр, он покажет руководство по макету, как в примере ниже, который является примером Instagram. При повороте UILabel

будет отображаться также указатель макета.

Какой самый лучший и точный способ достижения этой функциональности.

Это то, что я уже сделал

Вот код, который я сделал для простого перетаскивания и масштабирования.


Добавьте жест в UILabel

1 ответ

Ниже вы найдете обновленную версию вашего класса, которая должна делать то, что вы описываете.

Большая часть обновленного кода находится в последнем разделе ( Руководства ) ближе к концу, но я обновил ваш UIGestureRecognizer , а также ваш основной метод init .

— вертикальная направляющая для центрирования положения вида по горизонтали.

— горизонтальная направляющая для центрирования поворота вида на 0 градусов.

— привязка положения и поворота к направляющим со значениями допуска ( snapToleranceDistance и snapToleranceAngle свойства).

— Анимированное появление /исчезновение направляющих ( animateGuides и guideAnimationDuration свойства).

— Виды руководства, которые можно изменить для каждого варианта использования ( movementGuideView и rotationGuideView свойства)

Для всех, кто хочет, вот тестовый проект с использованием этого класса.

Создание слайд-вида, похожего на новое приложение Google Maps iOS, проблемы с несколькими UIPanGestureRecognizer

Я пытаюсь воспроизвести поведение слайд-меню нового приложения iOS Google Maps.

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

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


После много исследования и тестирования I есть что-то, что близко, но не совсем работает, как нужно.

моя реализация-это UIScrollView с рамкой 320×400 и представлением контента 960×400 с прокруткой страниц. Затем я добавляю UIPanGestureRecognizer, который обрабатывает слайд всего представления.

вот handleTouch IBAction PanRecognizer:

Так что в основном, если панорамирование скользит вверх, а не в стороны. У меня проблема с этим методом handlePan заключается в том, что я не могу заставить его работать так, чтобы он не позволял прокручивать выше точки. Что это то, что я пытаюсь сделать с :

самая большая проблема заключается в том, что распознаватель жестов UIScrollView Pan обрабатывает лоток одновременно с тем, который я добавил. Это означает, что UIScrollView скользит вверх и в стороны одновременно, если я скольжу вверх по виду пальцем, перемещая его в стороны.

Цукерберг рекомендует:  Горизонтальная прокрутка контента сайта с помощью jQuery

то же самое происходит, если я пытаюсь скользить только в стороны и переместите представление вверх на 1 пиксель, при этом мой распознаватель панорамирования заканчивается и полностью сдвигает представление.

временное решение я нашел-это установить мой Пан распознавателя требовать от UIScrollview Пан распознавателя, чтобы не работать.

поэтому теперь, когда я скольжу в стороны, он работает и не перемещает вид вверх. Проблема в том, что он устанавливает себя как неудачный только тогда, когда вы удаляете палец, и вид не прокручивается в стороны. Что происходит, так это то, что вы не можете панорамировать вид вверх больше, но если вы щелкаете вверх внутри, он делает «UIGestureRecognizerStateEnded», если и скользит вверх.

Я посмотрел на темы UIPanGestureRecognizer и посмотрел на несколько вариантов, включая подкласс моего Pan recognizer, чтобы он распознал только скользящие вверх кастрюли, а не боковые.

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

идеальным решением было бы то, что когда слайд в сторону записанный, он перемещает содержимое только по горизонтали и обрабатывается UIScrollView и что при записи горизонтальной панели он перемещается только по вертикали и обрабатывается моим panreconizer. То же поведение, что и Safari с горизонтальной и вертикальной прокруткой. Хотя я не знал, как это осуществить.

Спасибо за чтение, дайте мне знать, что вы думаете. Было бы здорово, если бы у многих приложений было отличное слайд-меню, такое как Google Maps!

UIPanGestureRecognizer сделать перемещаемой UIView в ИО Swift


Этот учебник был обновлен для XCODE 7.3 & Swift 2.2

Многие новые приложения заменяют кнопки & этикетки с помощью жестов. Это поможет вам избежать путаницы с экрана без потери функциональности. Итак, сегодня мы будем учиться основам uipangesturerecognizer. И, как создать жест распознаватель зависимостей в случае, если вы несколько жест распознавания установлен в одной из точек зрения.

  1. Первая позволяет настроить X Код проекта, как обычно,. Создать новый сингл вид приложения X Код проекта. Введите имя проекта в жест панорамирования демо и сохраните его на рабочем столе.

2. Перейти на главную раскадровки и выберите View Controller. Установите его размер iPhone 4-дюймовый в секции атрибутов.

3. Перетащите UIView, чтобы посмотреть контроллер & установить его размер как следует

4. Установите свой цвет на желтый

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

6. Подключите жест панорамирования на быстрое файла

7. Добавить следующий код в пан действия жест

Вместо жесткого кодирования желтого зрения мы используем отправителя. Таким образом, вы можете использовать тот же код для иной точки зрения или подключите же метод с другой точкой зрения. Кроме того, поскольку мы используем отправителя; убедитесь, что вы подключили жест панорамирования на желтом зрения.

Теперь построить и запустить приложение в iPhone 5S & перетащите желтую точку зрения

Скачать файл X-код
Вызов 1: Изменять желтые просмотров цвет с желтого на зеленый на кране


Если у вас есть кастрюля & кран жест активны на ту же точку зрения вы заметите, что если вы перетащите желтую просмотра только немного, то он меняет цвет на зеленый. Ваша следующая задача, чтобы не изменять желтые просмотреть цвет, когда сковорода активный.

Вызов 2: Создать жест зависимость поэтому, когда пан активен желтый вид не будет менять цвет.

UIPan Gesture Recognizer

A concrete subclass of UIGesture Recognizer that looks for panning (dragging) gestures.

Declaration

Overview

The user must be pressing one or more fingers on a view while they pan it. Clients implementing the action method for this gesture recognizer can ask it for the current translation and velocity of the gesture.

A panning gesture is continuous. It begins ( UIGesture Recognizer State Began ) when the minimum number of fingers allowed ( minimum Number Of Touches ) has moved enough to be considered a pan. It changes ( UIGesture Recognizer State Changed ) when a finger moves while at least the minimum number of fingers are pressed down. It ends ( UIGesture Recognizer State Ended ) when all fingers are lifted.

Clients of this > UIPan Gesture Recognizer object for the current translation of the gesture ( translation In View: ) and the velocity of the translation ( velocity In View: ). They can specify the view whose coordinate system should be used for the translation and velocity values. Clients may also reset the translation to a desired value.

Topics

Configuring the Gesture Recognizer

The maximum number of fingers that can be touching the view for this gesture to be recognized.

The minimum number of fingers that can be touching the view for this gesture to be recognized.

ios — Плавная анимация с использованием drawRect: и UIPanGestureRecognizer


ОК. Я видел много тем, которые похожи на то, что я пытаюсь сделать здесь, но ничего, что вполне соответствует. Может быть, мой подход отходит от базы. Здесь сделка.

Я рисую диаграмму для моего подкласса UIView в drawRect :. Затем я использую UIPanGestureRecognizer для перевода смещения диаграммы (внутреннего, а не в иерархию представлений) вправо/влево. Это отлично работает, но моя проблема заключается в том, что действие распознавателя запускается с относительно низкой частотой. В частности, результирующее панорамирование MUCH choppier, чем, скажем, в scrollview или tableview. В частности, когда число точек в моей диаграмме увеличивается. Теперь то, что мне было бы интересно сделать, — это не на самом деле триггер рисовать из действия жестов, но есть таймер, стреляющий примерно в 30 раз в секунду, интерполируя смещение с момента, когда кастрюля загорелась до текущего момента. Однако это становится все более сложным.

Цукерберг рекомендует:  Proxy - Python3 requests proxy с авторизацией basic auth.

У кого-нибудь есть предложения? Должен ли я просто делать это с помощью UIScrollView? Причина, по которой я бы предпочел не то, чтобы данные могли распространяться довольно далеко в любом направлении, и я бы не хотел рисовать (или, по крайней мере, хранить) весь путь сразу, а просто сделать раздел, который в настоящее время отображается. Должен ли я использовать CAShapeLayer? Я хотел бы получить какой-то вклад, прежде чем я проведу еще один день с этими возможностями.

Любой вход или опыт будут приветствоваться большинством.

    5 1
  • 8 апр 2020 2020-04-08 07:55:36
  • samson

1 ответ

Итак, в конце концов, я DID в конечном итоге положить эти вещи в UIScrollView. Мне пришлось сделать немало работы, чтобы запустить это, сложная часть — создание серии PANES, которая будет добавлена в scrollview. Каждая панель запрашивает делегата для данных, которые ему нужно нарисовать, а затем все они сшиты вместе. К счастью, все отлично поработало, когда я разместил эти прокрутки, содержащие панели диаграмм, в виде таблицы. Все еще не занимались масштабированием, но я видел здесь несколько сообщений, которые должны сделать его относительно тривиальным.

Так что ответ на мой оригинальный вопрос. НЕ пытайтесь кастрюлю и нарисовать на каждом кадре, это будет изменчиво, и если вы отбросите какой-то настоящий хак, нет хорошего способа найти его, чтобы сгладить его. Прокрутка позволяет обрабатывать все эти проблемы для вас, если вы можете легко разделить свой вид. Думаю, я мог бы использовать один длинный вид, но потом, когда набор данных станет большим, у меня проблемы.

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

Drawapp — Создание приложения с помощью UIPanGestureRecognizer


Во многих приложениях используется выдвижная панелька под названием Navigation Drawer. Все ее видели, но не все знают, что она именно так называется. Использование Navigation Drawer дает приложению большую удобность в использовании, расширяет функционал, а также придает Android приложению более современный вид и стиль. Но не взирая на массовое распространенное использование этой штуки, толковых уроков по ее использованию не так много, а само использование Navigation Drawer не такое уж и простое и требует определенной работы. Этот урок я делаю на базе толкового урока с Хабра, имея желание его как то обобщить, упростить и представить в более доступной и ясной форме (не гарантирую, что так и будет).

Пример Navigation Drawer в приложении Q uickMemo :

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

Создаем новый проект, выбираем Blank Activity, минимальную версия Android я выберу 4+.

Сразу скачайте и поместите в соответствующие папки в drawable необходимые изображения для панели.

Начнем с работы над файлом activity_main.xml. В нем нам нужно создать специальный DrawerLayout и в нем поместить область FrameLayout для отображения выдвижной панели, а также список ListView, из которого и будет состоять Navigation Drawer. Для этого добавляем в файл следующий код:

Все строковые элементы мы создадим под конец.

Для определения вида каждого отдельного пункта списка панели, создадим отдельный файл в папке layout под названием nav_draw.xml и добавим следующее:

В качестве фона для созданного выше элемента TextView мы используем xml файл из папки drawable. Давайте его создадим. В папке drawable создаем файл под названием activated_background.xml и добавим в него следующий код:

Здесь мы активно используем ссылку на синий цвет, пока еще не существующий в приложении. Чтобы его создать, в папке values создаем файл по имени color.xml и добавляем в него код:

Изменим меню приложения, изменив код в файле menu_main.xml в папке menu:

Что касается кода приложения, то в нем необходимо реализовать такие основные моменты:

— инициализировать все используемые объекты и переменные;

— задать поведение переключателю панели Navigation Drawer;

— настроить переход на необходимый фрагмент при выборе соответствующего пункта списка панели;

Код файла java класса должен выглядеть вот так (кликаем ссылку) MainActivity.java.

Чтобы приложение заработало, осталось доработать в нем фрагменты для перехода на них с Navigation Drawer и добавить все используемые строки. Чтобы реализовать фрагменты, создаем в проекте новый пакет под названием fragments и в нем создаем 3 класса по имени ScreenOne, ScreenTwo, ScreenThree:

Код во всех троих классах одинаков, за исключением xml файла интерфейса. Код для ScreenOne.java:

Для настройки интерфейса этого класса мы ссылаемся на файл под названием screen_first, давайте его создадим. В папке layout создаем файл под названием screen_first.xml и добавим в него код:

Классы (кликаем ссылку) ScreenTwo , ScreenThree аналогичны первому ScreenOne, единственное отличие в строке ссылки на файл интерфейса:

Для второго и третьего фрагментов в папке layout нужно создать интерфейса файлы screen_second.xml и screen_third.xml, которые выглядят аналогично к тому же screen_first.xml с единственным отличием в ссылке на текстовый ресурс:

Остается только внести все используемые в проекте строковые ресурсы в файл strings.xml :

Теперь можем рискнуть протестировать приложение. Запускаем проект и смотрим на результат:

Все работает исправно, а мы научились создавать красивую и полезную выдвижную панель Navigation Drawer.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих