開始に使用できるサンプルコードを次に示します。ViewControllerに追加するだけです。UIView
フローティングバーにはジェネリックを使用UIScrollView
し、スクロールビューにはジェネリックを使用しますが、必要に応じて変更できます。
@interface BNLFDetailViewController () <UIScrollViewDelegate> {
UIScrollView *_scrollView;
UIView *_floatingBarView;
CGFloat _lastOffset;
}
@end
そして、@implementation
追加で:
- (void)viewDidLoad {
[super viewDidLoad];
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
_scrollView.delegate = self;
_scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height * 2);
[self.view addSubview:_scrollView];
CGRect f = self.view.bounds;
f.size.height = kFloatingBarHeight;
_floatingBarView = [[UIView alloc] initWithFrame:f];
_floatingBarView.backgroundColor = [UIColor blackColor];
[self.view addSubview:_floatingBarView];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == _scrollView) {
CGFloat offsetChange = _lastOffset - scrollView.contentOffset.y;
CGRect f = _floatingBarView.frame;
f.origin.y += offsetChange;
if (f.origin.y < -kFloatingBarHeight) f.origin.y = -kFloatingBarHeight;
if (f.origin.y > 0) f.origin.y = 0;
if (scrollView.contentOffset.y <= 0) f.origin.y = 0; //Deal with "bouncing" at the top
if (scrollView.contentOffset.y + scrollView.bounds.size.height >= scrollView.contentSize.height) f.origin.y = -kFloatingBarHeight; //Deal with "bouncing" at the bottom
_floatingBarView.frame = f;
_lastOffset = scrollView.contentOffset.y;
}
}
UIView
ではなく、として実行する必要がありますUIViewController
。iOS開発の一般的なルールは、ビューコントローラーが画面全体を占め、ビューが画面の一部を占める「サブビュー」に使用されることです(ただし、iPadの場合はそうではありません)。いずれにせよ、aUIViewController
には独自のライフサイクル(willAppear
、didAppear
など)がありますが、これはフローティングバーには不要/不要なので、間違いなく。である必要がありUIView
ます。