我有一個總是顯示三個項目的滾動視圖。我需要中間的東西很大,而左邊和右邊的東西很小。iOS UIScrollView - 檢測分頁刷卡 - 中間圖標大的其他圖標較小
我的問題是,我怎麼能檢測到一個分頁刷卡?我打算做的是每當scrollview被「分頁」時,我們檢測到它,然後檢查scrollview中的所有項目 - 如果項目在中間「框架」,我們使它變大,否則它變小。
我會談談這個最好的方法嗎?
我有一個總是顯示三個項目的滾動視圖。我需要中間的東西很大,而左邊和右邊的東西很小。iOS UIScrollView - 檢測分頁刷卡 - 中間圖標大的其他圖標較小
我的問題是,我怎麼能檢測到一個分頁刷卡?我打算做的是每當scrollview被「分頁」時,我們檢測到它,然後檢查scrollview中的所有項目 - 如果項目在中間「框架」,我們使它變大,否則它變小。
我會談談這個最好的方法嗎?
您需要在您的UITableView
上有一位代表接受scrollViewDidScroll:
消息(或者scrollViewDidEndDecelerating:
,具體取決於您的需要)。見the UITableViewDelegate documentation。
我在scrollViewDidScroll
裏面做這種檢查。我檢查當前的內容偏移量,如果由當前偏移量和滾動視圖框架的大小形成的矩形與我的滾動視圖頁面中的一個適當相交,那麼我將更新該page
。在這裏,您可能希望按比例縮放每個項目,使其與當前內容偏移的中心接近(這將爲您的滾動器創建一個漂亮的碼頭樣式放大效果)。
編輯:所以,假設沒有經過測試的僞代碼爲一個水平頁滾動的「項目」的數組。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint *currentOffset = scrollView.contentOffset;
for (UIView *item in itemsToDisplay)
{
// The location in the entire scroll view canvas at which
// we consider this item to "live"
CGPoint *naturalCentre = item.naturalCentre;
// How far from our desired point are we?
CGFloat scale = 100 - fabs(naturalCentre.x - contentOffset.x);
// Clamp this to positive values only, and normalize from 0.5 to 1
scale = 0.5 + (scale < 0 : 0 ? (scale/200));
// Scale this view accordingly
item.layer.contentsScale = scale;
}
}
這是從袖口註銷,並需要相當多的調試。
這是一個很好的解決方案!你能否給我一個簡短的代碼示例,說明如何將這些項目按比例縮放到與內容偏移中心的距離?這聽起來非常平滑! – spentak 2012-01-16 16:15:39
這實際上所有的工作都很好,但問題是所有項目都按比例放大或縮小。我們如何檢測scrollview中的哪個項目位於「naturalCentre」 – spentak 2012-01-16 23:17:13
我不確定這裏的含義 - 所有內容都應該按比例縮放,比如contentOffset距離項目的自然中心有多遠。如果「contentOffset」恰好在自然中心,則比例爲1.距離自然中心越遠,比例越接近0.5。要「檢測」哪個項目位於中心,只需查看偏移量並與每個項目的中心進行比較? – 2012-01-17 12:58:43