開始に使用できるサンプルコードを次に示します。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ます。