#ios #objective-c #uitableview #uiimageview #storyboard
#iOS #objective-c #uitableview #uiimageview #Раскадровка
Вопрос:
Я хотел бы закодировать контроллер просмотра «настройки», как в приложении Path Talk. Это своего рода эффект параллакса. Twitter также имеет тот же эффект.
Я начал что-то с Storyboard, но на самом деле это не работает: я использую TableViewController. Внутри TableView у меня есть представление, которое содержит 2 изображения (фоновые изображения и изображения профиля), а затем 3 раздела просмотра таблицы. Проблема в том, что когда пользователь перетаскивает изображение вниз, изображение опускается. Это не похоже на приложение Path Talk, потому что в приложении Path Talk изображения исправлены. Они не перемещаются вниз, когда пользователь перетаскивает их (см. Рисунки).
Итак, я нашел библиотеку на GitHub:https://github.com/apping/APParallaxHeader это могло бы мне помочь, но прежде чем тратить свой день на библиотеку, было бы неплохо получить ваши советы. Возможно ли это легко сделать с помощью раскадровки или библиотека является лучшим решением?
Спасибо за вашу помощь!
Комментарии:
1. Добавляйте заголовок не в tableview, а в его superview
2. Я не могу добавить заголовок в superview. Как вы это сделали? Ссылка
3. Я думаю, это должно быть возможно с обычным UIViewController. Добавьте к нему UITableView и заголовок поверх него.
4. Наконец, это решение не работает, потому что изображение фиксируется, когда пользователь прокручивает вниз и когда он прокручивает вверх
5. Теперь я в замешательстве. Я думал, вы хотите фиксированное изображение?
Ответ №1:
Начните с обычного UIViewController
в раскадровке. Добавьте к нему UITableView
и, т.е. UIImageView
. Рамка TableView должна занимать весь вид, а ImageView — только нужную часть вверху. Затем заставьте ваш ViewController реализовать UITableViewDelegate
(и, возможно UITableViewDataSource
, если вы хотите заполнить таблицу из него). В viewDidLoad
установите делегаты и contentInset так, чтобы они отображали изображение в качестве заголовка:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.contentInset = UIEdgeInsetsMake(self.imageView.frame.size.height, 0, 0, 0);
self.tableView.dataSource = self;
}
реализуйте, scrollViewDidScroll:
поскольку a UITableViewDelegate
соответствует UIScrollViewDelegate
протоколу, и перемещайте изображение туда в зависимости от направления прокрутки:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat imageY = -scrollView.contentOffset.y-self.tableView.contentInset.top;
if(imageY>0)
imageY = 0;
self.imageView.frame = CGRectMake(0, imageY, self.view.bounds.size.width, self.imageView.bounds.size.height);
}