#import "RootViewController.h" #define kScreenSize [UIScreen mainScreen].bounds.size #define kPrintDebug NSLog(@"%s",__func__) @interface RootViewController ()<UIScrollViewDelegate> { UIScrollView *_scrollView; } @end @implementation RootViewController - (void)dealloc { [_scrollView release]; [super dealloc]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor lightGrayColor]; [self creatScrollView]; } /* - imageNamed: - imageWithContentsOfFile: 區別: 1.- imageNamed: 加載圖片 第一次 加載的時候 會把圖片從app包內(手機磁盤) 加載到手機內存的緩存中,下次若是再加載相同的圖片那麼直接從緩存中加載,提升效率。可是緩存是有限的,app程序都要用到緩存,若是緩存低了那麼直接影響app 運行效率。- imageNamed:方式加載的對象 是不釋放的 應用場合:加載小圖片 (幾kb 幾十kb),少許圖片 2.- imageWithContentsOfFile: 加載圖片 每次調用都會從app包內(磁盤) 中 獲取,用完以後 也會自動釋放。可是相對於- imageNamed:加載效率低一些 */ - (void)creatScrollView { //實例化一個滾動視圖對象 //內容 是能夠滾動的 _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, kScreenSize.width, kScreenSize.height-90)]; //UIImage *image = [UIImage imageNamed: @"car4"]; //獲取圖片在app包內的路徑 NSString *path = [[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"]; UIImage *image = [UIImage imageWithContentsOfFile:path]; //設置圖片的真實大小 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; imageView.image = image; //粘貼到滾動視圖 [_scrollView addSubview:imageView]; [imageView release]; //背景顏色 _scrollView.backgroundColor = [UIColor redColor]; //1.滾動視圖的內容通常要大於 滾動視圖的範圍 //2.設置 滾動視圖的 滾動範圍 (滾動範圍 通常就是 內容的大小範圍) // 滾動區域範圍 > 滾動視圖的範圍 //設置滾動視圖的滾動區域範圍(要想滾動必須設置滾動內容大小) _scrollView.contentSize = imageView.bounds.size; //設置回彈(默承認以回彈) _scrollView.bounces = YES; //顯示或者隱藏 滾動條 默認顯示 _scrollView.showsHorizontalScrollIndicator = NO;//水平 _scrollView.showsVerticalScrollIndicator = NO;//豎直 //設置 是否能夠滾動 NO禁用滾動 //_scrollView.scrollEnabled = NO; //設置方向鎖 _scrollView.directionalLockEnabled = YES;//同時容許一個方向滾動 //設置 內容 偏移量(相對於 粘到到滾動視圖的位置滾動偏移) //若是偏移量CGPointMake(-50 ,-50) 內容會向 右 下偏移 //若是偏移量CGPointMake(50 ,50) 內容會向 左 上偏移 //_scrollView.contentOffset = CGPointMake(-50 ,-50); //點擊狀態欄是否能夠滾動到內容視圖的頂部 _scrollView.scrollsToTop = YES; //設置縮放(必須設置代理 實現協議的方法) //實現- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView _scrollView.minimumZoomScale = 0.5; _scrollView.maximumZoomScale = 2.0; //設置代理 _scrollView.delegate = self; //self.view當前視圖是RootViewVontroller, [self.view addSubview:_scrollView]; } #pragma mark - UIScrollViewDelegate //經常使用1 //當 縮放 滾動視圖 的視圖 通知代理 返回一個指定 內容視圖 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { //返回須要縮放的視圖地址 //當前滾動視圖中只有 一個 視圖 return scrollView.subviews[0]; } //經常使用2 //手指 將要拖拽滾動視圖的時候調用 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { kPrintDebug; } //經常使用3 //滾動視圖滾動的時候調用 滾動的時候一直調用 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { //kPrintDebug; //CGPoint point = scrollView.contentOffset; //NSLog(@"偏移量:%@",NSStringFromCGPoint(point)); } //經常使用4 //將要結束拖拽的時候調用 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { kPrintDebug; } //經常使用5 //已經結束拖拽調用 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { kPrintDebug; } //經常使用6 //將要開始 減速中止 的時候調用 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { kPrintDebug; } //經常使用7 //已經 減速中止的時候調用 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { kPrintDebug; } //擴展 //將要開始 變形的時候調用 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { kPrintDebug; } //變形過程當中一直調用 - (void)scrollViewDidZoom:(UIScrollView *)scrollView { kPrintDebug; } //變形結束的時候調用 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { kPrintDebug; } //下面兩個協議方法 有效 必須 設置滾動視圖的_scrollView.scrollsToTop = YES;爲yes //_scrollView.scrollsToTop = YES; //上面設置以後 能夠經過 代理的協議的方法設置點擊狀態欄時候能夠滾動頂部 //經過代理設置 點擊狀態欄是否能夠滾動到頂部 - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { kPrintDebug; return YES; } //點擊狀態欄已經滾動到頂部 - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView { kPrintDebug; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end