Дмитрий: я думаю нет, но нужно пробовать. Задача же типовая, в том же webview часто встречаются вложенные списки и я не заметил неожидаемого поведения. Если будут проблемы, то всегда можно поискать uiscrollview inside uiscrollview - там описаны решения от блокировки scrollenabled пока contentoffset дочернего скрола не будет 0(или же выставление у родительской delayTouches) до уже готовых сабклассов контейнеров uiscrollview
Daniyar Gabbasov: Само собой, готового решения Вы не получите. Я всего лишь показал как это можно сделать. Сгенерируйте маску и по ней уже получите то что нужно
К сожалению, я не работал активно с size class'ами , так как разработка приложений ведется в том числе и под ios 7. И насколько я понял, то что Вы хотите сделать в текущей версии не реализуемо . Я думаю к 9 они допилят их. Те же констраинты , когда появились на ios6, были отвратительны.
На SO предлагают различной степени костыли, к примеру установить шрифт побольше (как для plus), и при этом поставить возможность уменьшения size font у label, таким образом оно ужмется на маленьких айфонах. Или же вообще забить и позволить пользователю в настройках девайса самому установить размер шрифтов, если ему мелковато . Я бы делал в коде
Насчет констреинтов, я не подразумевал, что они плохие, я имел ввиду, что они имеют чертовски не дружелюбный интерфейс. Пока ты в builder'e - все ок, когда тебе нужно что-то в коде создать - вот тут то и начинается куча плохочитаемого кода
Что у Вас было:
scrollView: [contentView:[imageView, labelView, textView]]
И эти все вьюшки имели постоянный размер, который помещался на экран девайса. Выходила ситуация, когда главный scrollView попросту не скролил ничерта. Вы могли добиться желаемого поведения следующим образом:
1) Сделать размер textView вариативным, в зависимости от контента (textView.frame.size.height = textView.contentSize.height)
2) обновить размер contentView в соотвествии с изменившимся размером textView (contentView.frame.height = imageView.height+labelView.height+textView.height)
3) обновить contentSize у ScrollView так как Вы делали (scrollView.contentSize.height = contentView.height)
Обратите внимание, что я привожу описание реализации на псевдоязыке , так как в проекте включен autolayout все становится не так просто...
Я не стал так делать, потому что получилось бы много кода, да и приложение криво работало на других девайсах (на iphone 6 все плыло). По этому сделал все правильно, во-первых убрал костыль ввиде contentView и выставив правильные autolayout constrainte для вьюшек внутри scrollView: все резиновое по ширине; по высоте у label и image view фиксировано и прибито к потолку, а у textView высота меняется , но не может быть ниже определенного числа, но при этом textView прибит label и к полу scrollView.
Дальше в коде мы просто устанавливаем размеры области скрола у scrollView(которые базируются на размерах текста), а это, благодаря constraince растягивает textView само
Залейте код на гитхаб, иначе сложно будет указывать на проблемные места. Из того что я вижу - у вас не верно выстроенная иерархия вьюшек (представление) в xib'e|storyboarde. Вам нужно сначала положить UIScrollView а у же в него вставить все остальные вьюхи
Уточните, пожалуйста, о каком скролинге речь? Вроде же текст листается (скролится)
Из проблем увидел только кривую верстку которая не поддерживает "короткие" девайсы
ищите self.viewController в апп делегате
это и есть искомый класс
выходит первый пункт можете выкинуть
и сразу вызывать
[(ViewController*) self.viewController pauseGame];
ну у Вас есть два обьекта: один appDelegate , второй UIViewController , представитель класса ViewController
что бы из appDelegate послать сообщение в viewController Вам нужно получить ссылку на него. этот viewController создается (явно или не очень) в методе application:didFinishLaunchingWithOptions
когда вы писали ViewController* object = [[ViewController alloc] init];, вы создавали третий объект, который в приложении никак не участвовал и посылали ему сообщение, само собой как горохом по ведру, этот третий объект пользователю не был отображен.
когда вы писали
ViewController pauseGame]
то посылали сообщение классу (не объекту) что само собой не правильно.
и так , Ваша задача сводится к
1) найти вот этот второй объект и запомнить его
2) послать ему сообщение
для первого пункта заводите в appDelegate переменную @property (nonatomic, strong) ViewController * vc; (не забудьте заимпортить класс)
и в методе application did finish запоминаете второй объект
...
vc = self.navigationController.topViewController; (это не точный код, я не помню свойство для получения видимого контроллера. ну и не факт что у вас там навигацыон контроллер вверху... по этому и просил привести метод)
ну и для второго пункта
в методе когда приложение свичается - вызываете
[self.vc pauseGame]
да, и я настоятельно не рекомендую использовать Вам сингелтон(как написал @MagoVinch ) тут он не нужен, да и научишь вот так неопытных программистов сингелтону, и они его лепят даже в вьюконтроллеры
ну а зачем белым, если верить stackoverflow, то можно стирать stackoverflow.com/questions/3800278/iphone-draw-tr...
т.е. план корректируем - вьюшку с изображением вообще не трогаем, а сверху на нее ложим вьюшку прозрачную в которую рисуем/стираем нужное (лучше леер вместо вьюшки). хотя это никак не относится к изначальному вопросу...