注:只要有學(xué)到新的知識撇簿,會不斷更新
CGPoint contentOffset; // 顯示窗口在滾動內(nèi)容畫布里面的左上角的偏移量差购,(x, y)
CGSize contentSize; // 滾動內(nèi)容的畫布大小
UIEdgeInsets contentInset; // 可以在外圍加入的一個邊框找蜜,有距離高稳析,底部,左邊彰居,右邊的距離
- 可能會用到的方法來設(shè)置contentSize,CGRectGetMaxY(放一個控件的frame)畦徘,通過這個方法,可以返回一個控件的最大y坐標(biāo)旧烧,比如要設(shè)置一個最底部的空間剛好壓滾動空間contentsize的底部,就用這個方法令滾動控件的高等于最底部空間的最大y
關(guān)于監(jiān)控滾動的代理
- 先遵循<UIScrollViewDelegate>平委,并設(shè)置代理為self
self.scrollView.delegate = self;
此時可以實現(xiàn)代理里面各種方法來對滾動進行監(jiān)聽,并完成對應(yīng)的操作
比如實現(xiàn)- (void)scrollViewDidScroll:這個方法夺谁,只要在滾動,就調(diào)用這個方法匾鸥。可以用來設(shè)置pagecontrol的當(dāng)前頁的變換
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//利用偏移量,設(shè)置控件的當(dāng)前頁
int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
self.pageControl.currentPage = page;
}
封裝自動來回滾動UIScrollView記錄
首先創(chuàng)建一個自定義xib馏艾,和兩個繼承UIview的類文件
- 要提供一個接口給外界創(chuàng)建奴愉,比如類方法,名為類名,
- 通過mainbundle加載xib文件,并返回。
- 通過awakeFromNib或者initWithFrame來初始化控件锭硼,里面調(diào)用[self setUp]
- //通過代碼創(chuàng)建空間時,用這個方法來初始化 (instancetype)initWithCoder:(NSCoder *)aDecoder
- /通過xib/storyboard中創(chuàng)建控件時轰异,調(diào)用這個方法初始化(void)awakeFromNib
- 記得定義一個叫setup的方法暑始,里面放初始化的操作.
接著重寫傳進來的數(shù)據(jù)set方法,并重寫layoutSubviews
- 將傳入的數(shù)據(jù)進行過濾廊镜,賦值,布局等操作
- 在layoutSubview(當(dāng)父控件位置被修改的時候調(diào)用)s中對子控件 frame等屬性設(shè)置
將定時器寫在setUp內(nèi)
[NSTimer scheduledTimerWithTimeInterval:1.5
這里要寫方法所在的類 target:pageview
selector:@selector(changePage)
userInfo:nil
repeats:YES];
}
- 如何換滾動的方向
// MARK: - 換頁的功能
- (void)changePage{
CGFloat imgW = self.scrollView.frame.size.width;
CGFloat dx = self.scrollView.contentOffset.x + imgW;
//記錄當(dāng)前的方向, static用來存儲,下次進來的值保持上次
static BOOL direction ;
//僅當(dāng)最后一頁或者第一頁的時候判斷方向
if(self.pageControl.currentPage == self.imageNames.count -1|| self.pageControl.currentPage == 0)
{direction = [self checkDirection];}
//根據(jù)判斷結(jié)果進行方向滾動
if(direction){
[UIView animateWithDuration:1.0 animations:^{self.scrollView.contentOffset = CGPointMake(dx, 0);}];
}
if(!direction ){
[UIView animateWithDuration:1.0 animations:^{self.scrollView.contentOffset = CGPointMake(dx - 2*imgW, 0);}];
}
}
// MARK: - 方向的判斷
- (BOOL) checkDirection{
BOOL gorigth = YES ;
if (self.pageControl.currentPage == 0) {
gorigth = YES;
}
if(self.pageControl.currentPage == self.imageNames.count -1){
gorigth = NO;
}
return gorigth;
}
遇到的問題
- 不能將定時器放在layoutSubview方法中播赁,這樣會由于蘋果系統(tǒng)的runloop機制吼渡,這個機制會收集一些修改(frame,color等),然后在循環(huán)結(jié)束時一并的去修改替劈,此時就會連續(xù)幾乎同時的調(diào)用多次layoutSubview中的方法.