※変な...
Twitterのヘッダ画像のような効果が作れる。
導入は簡単でインスタンスを1個作っていくつかのメソッドを呼ぶだけ。
- (void)viewDidLoad
{
[super viewDidLoad];
_stretchableTableHeaderView = [HFStretchableTableHeaderView new];
[_stretchableTableHeaderView stretchHeaderForTableView:self.tableView withView:_stretchView];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[_stretchableTableHeaderView scrollViewDidScroll:scrollView];
}
- (void)viewDidLayoutSubviews
{
[_stretchableTableHeaderView resizeView];
}
ソースコードも正味20-30行と短い。内容は見てもらうとしてUITableViewのスクロールに合わせてビューのサイズを替えているだけ。ちょっとしたアイディアでうまく実現できてる。
サンプルのStoryboard
サンプルではやっていないが、scrollViewdidiScroll: で画像を拡大すれば Twitterヘッダそっくりな動きになるのでは。
ちょっとやってみた。
HFStretchableTableHeaderView.m のscrollViewDidScrollにUIView.transformを入れてみる。
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
CGRect f = _view.frame;
f.size.width = _tableView.frame.size.width;
_view.frame = f;
if(scrollView.contentOffset.y < 0) {
CGFloat offsetY = (scrollView.contentOffset.y + scrollView.contentInset.top) * -1;
initialFrame.origin.y = offsetY * -1;
initialFrame.size.height = defaultViewHeight + offsetY;
_view.frame = initialFrame;
// 追加 >>>
if (offsetY >= 0.0) {
CGFloat scale = 1.0 + offsetY/defaultViewHeight;
_view.transform = CGAffineTransformMakeScale(scale, scale);
}
// <<< 追加
}
}
スクロールオフセットを元に倍率を決めてtransformへ入れてみた。さてどうだろう。これが
ビヨーンとこうなる
もちろん画像も(gifアニメでなくてスミマセン)
※UIImageViewのModeはScale TO Fill から Centerなどに替えておく
面白い。こんなに簡単にできるとは。



