- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:kScreenBounds]; scrollView.backgroundColor = [UIColor yellowColor]; [self.view addSubview:scrollView]; UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; button.backgroundColor = [UIColor blueColor]; button.frame = CGRectMake(10, 10, kScreenWidth - 20, 100); [scrollView addSubview:button]; // 1. 默認 CGSizeZero == CGSizeMake(0, 0) // contentSize 設置可以滾動的范圍 scrollView.contentSize = CGSizeMake(1000, 1000); // 2. 默認 CGPointZero // contentOffset 偏移量, 滾動的位置 // 不設置contentSize, contentOffset也可以改變 // 問題: 改變contentOffset什么變了? // 答案: 改變contentOffset, 實質上是對scrollView的bounds進行了改變.(改變子視圖的坐標) NSLog(@"scrollView frame is : %@", NSStringFromCGRect(scrollView.frame)); NSLog(@"scrollView bounds is : %@", NSStringFromCGRect(scrollView.bounds)); scrollView.contentOffset = CGPointMake(0, 500); NSLog(@"scrollView frame is : %@", NSStringFromCGRect(scrollView.frame)); NSLog(@"scrollView bounds is : %@", NSStringFromCGRect(scrollView.bounds)); // 3. contentInset // 添加滾動區域四周的滾動范圍 // UIEdgeInsets age = {10, 10, 10, 10}; scrollView.contentInset = UIEdgeInsetsMake(10, 10, 10, 10); // 4. directionalLockEnabled // 鎖定垂直或水平滾動(45度角, 鎖會失效) scrollView.directionalLockEnabled = YES; // 5. bounces 回彈效果 // 邊緣彈動動畫關閉 NO // scrollView.bounces = NO; // 6. alwaysBounceVertical 在沒有垂直方向的滾動范圍時(0), 保證垂直方向的回彈效果 scrollView.alwaysBounceVertical = YES; // 7. alwaysBounceHorizontal 在沒有水平方向的滾動范圍時(0), 保證垂直方向的回彈效果 scrollView.alwaysBounceHorizontal = YES; // 8. pagingEnabled 按頁滾動 scrollView.pagingEnabled = YES; // 9. scrollEnabled 滾動視圖能否滾動, 默認為YES, NO(不可以滾) scrollView.scrollEnabled = YES; // 10. showsHorizontalScrollIndicator 是否顯示水平滾動指示器 scrollView.showsHorizontalScrollIndicator = YES; // 11. showsVerticalScrollIndicator 是否顯示垂直滾動的指示器 scrollView.showsVerticalScrollIndicator = YES; // 12. 滾動指示器的邊距 scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 100, 0, 0); // 13. indicatorStyle 滾動指示器的顏色(深色背景丶淺色背景) scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack; // 14. // scrollView.tracking 用戶有沒有開始拖動 // scrollView.tracking // scrollView.dragging 用戶是否正在拖動 // scrollView.dragging // scrollView.decelerating 是否減速中 // scrollView.decelerating // 14. scrollsToTop 滾動視圖, 雙擊狀態欄手勢是否存在 scrollView.scrollsToTop = NO; // 15. 代理 scrollView.delegate = self; // 16. 鍵盤消失模式(一般用這個UIScrollViewKeyboardDismissModeOnDrag) scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; // 測試: UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 300, kScreenWidth - 20, 200)]; textField.backgroundColor = [UIColor cyanColor]; [scrollView addSubview:textField]; // 17. 縮放系數 // 如果想進行視圖放大縮小, 必須實現viewForZoomingInScrollview: scrollView.minimumZoomScale = 2; scrollView.maximumZoomScale = 6; } // 與其想要縮放的子視圖綁定, scrollView的contentSize會跟隨這個子視圖改變 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return scrollView.subviews.firstObject; } // 滾動視圖滾動, 就會執行 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // tracking 用戶觸摸 if (scrollView.tracking) { NSLog(@"正在拖動滾動"); } else { NSLog(@"自己滾動中"); } // dragging 用戶開始滑動 if (scrollView.dragging) { NSLog(@""); } // decelerating 用戶觸摸結束 if (scrollView.decelerating) { NSLog(@""); } } // 將要開始拖拽 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { // NSLog(@"開始拖拽"); } // 將要結束拖拽 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { } // 將要開始進行減速 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { // NSLog(@"開始減速"); } // 已經結束減速 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { //NSLog(@"結束減速"); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. }