Прокрутите символы по горизонтали в iOS и увеличьте один в центре

Требование:

  • Алфавиты подряд
  • Используя жест смахивания, пользователь может смахивать алфавиты слева направо и наоборот.
  • Круг/увеличительное стекло в центре, которое увеличит символ в центре.

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

Например: символы ниже будут прокручиваться по горизонтали, а D появится под кружком/увеличительным стеклом с большим шрифтом, отмечающим выбор пользователя.

A B C D E F G

Нужно это в iOS 8 и Xcode 6 с использованием swift. Я понимаю, что какао-прикосновение также может появиться на картинке, и мне это удобно


person Sategroup    schedule 23.06.2015    source источник


Ответы (3)


В зависимости от требований, которые вам нужны, используйте UICollectionView. Это похоже на табличное представление, но более гибкое. Вы можете просмотреть документацию Apple по работе с UICollectionViews.

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionView_class/

Вот краткое изложение преимуществ UICollectionView: http://nshipster.com/uicollectionview/

Чтобы реализовать функцию увеличения, вы можете использовать метод UICollectionViewDelegate:

-layoutAttributesForElementsInRect:,

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

person chrisamanse    schedule 23.06.2015
comment
Сначала я думал об использовании UICollectionView, но я хочу показать круг или квадрат в центре, чтобы, когда пользователь проводит пальцем по центру, этот символ становился большим и отображал выбор пользователя. Таким образом, изначально этого круга/квадрата там не будет, но когда пользователь проводит пальцем по списку символов, он должен появиться, и пользователь будет знать, что это окно выбора. - person Sategroup; 23.06.2015
comment
Вы можете добавить представление в центре, добавив его в качестве подпредставления поверх UICollectionView. Показать/скрыть его с помощью методов UICollectionViewDelegate. - person chrisamanse; 23.06.2015
comment
это звучит как вариант, но трудно представить, как это будет выглядеть, поскольку мне также нужно отслеживать, находится ли персонаж в подвиде или нет. Это похоже на то, как вы прокручиваете увеличительное стекло, и когда вы прокручиваете символы, они кажутся увеличенными, даже если персонаж неполный в представлении ... - person Sategroup; 25.06.2015
comment
с помощью UICollectionView сделал эту работу. Спасибо - person Sategroup; 05.07.2015

https://github.com/acoomans/iOS-MagnifyingGlass может оказаться полезным.

Просто поместите это поверх прокрутки.

person gyan    schedule 23.06.2015
comment
Это не соответствует моим требованиям, поскольку увеличивает изображение везде, где пользователь нажимает. У меня очень конкретное требование - person Sategroup; 23.06.2015

Вам нужны буквы в UIScrollView. Это покрывает большинство ваших требований. В зависимости от того, как именно вы хотите, чтобы прокрутка определялась, хотите ли вы .pagingEnabled. Что касается лупы, вы можете реализовать что-то вроде кода здесь. Я почти уверен, что вам также нужно будет вызвать .setNeedsDisplay во время просмотра прокрутки scrollViewDidScroll:.

РЕДАКТИРОВАТЬ:

В комментариях был задан вопрос, как раскрыть весь текст. Есть два варианта.

Вариант 1. Для каждого символа вы можете добавить его к новой метке с фиксированной шириной и origin.x, установленной на CGRectGetMaxX() предыдущей метки.

Вариант 2. Вы можете рассчитать ширину текста и установить ширину меток в соответствии с возвращаемым значением. Я еще не очень хорошо знаком со Swift, поэтому напишу на Objective-C.

CGSize maxSize = CGSizeMake(CGFLOAT_MAX, self.scrollView.bounds.size.height);

// if using label.text
CGFloat width = ceilf([self.label.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.label.font} context:nil].size.width);

// if using label.attributedText
CGFloat width = ceilf([self.label.attributedText boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.width);

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

person cnotethegr8    schedule 23.06.2015
comment
Вот что я сделал: ViewController - ScrollView - View - Label - Содержит A B C D и так далее... Но, написав несколько символов, я вижу... а остальной текст обрезан в симуляторе. Я установил ширину прокрутки на 200 и по центру. Я делаю правильно? Кроме того, я не уверен, что делает TouchReader в предоставленной вами ссылке. - person Sategroup; 23.06.2015
comment
Ваш текст обрезается, потому что ваша метка не расширяется до ширины текста. Я обновлю свой ответ кодом для этого. Что касается ссылки, которую я отправил, сенсорный ридер должен перерисовывать, когда вы двигаете пальцем. Вам не нужен этот код. - person cnotethegr8; 23.06.2015