2010-02-25 50 views
3

也許是因爲晚了。無論什麼原因,我無法弄清楚爲什麼我遇到了一個簡單的CSScrollLayer示例的問題,我正在嘗試。我添加了一個50像素的Eclipse圖標視圖基礎項目,並在我的初始化方法(從initWithNibName稱爲:捆綁:)我有這樣的:CAScrollLayer不滾動!

-(void) initialize 
{ 
    CAScrollLayer *scrollLayer = [CAScrollLayer layer]; 
    scrollLayer.backgroundColor = [[UIColor blackColor] CGColor]; 
    CGRect bounds = self.view.bounds; 
    scrollLayer.bounds = CGRectMake(0, 0, bounds.size.width, bounds.size.height); 
    scrollLayer.contentsRect = CGRectMake(0, 0, bounds.size.width + 800, bounds.size.height + 800); 
    scrollLayer.borderWidth = 2.5; 
    scrollLayer.borderColor = [[UIColor redColor] CGColor]; 

    scrollLayer.position = CGPointMake(self.view.center.x, self.view.center.y - 20); 
    scrollLayer.scrollMode = kCAScrollBoth; 
    [self.view.layer addSublayer:scrollLayer]; 
    UIImage *image = [UIImage imageNamed:@"eclipse32.gif"]; 
    for(int i=0; i<6; i++) { 
    layer = [CALayer layer]; 
    layer.backgroundColor = [[UIColor blackColor] CGColor]; 
    layer.bounds = CGRectMake(0, 0, 100, 100); 
    layer.contents = (id)[image CGImage]; 
    layer.position = CGPointMake(layer.bounds.size.width * i, self.view.center.y); 
    [scrollLayer addSublayer:layer]; 
    } 
// [button removeFromSuperview]; 
// [self.view addSubview:button]; 
// self.view.userInteractionEnabled = YES; 
    [image release]; 
} 

滾動層顯示,圖標重複我有層屏幕邊緣周圍的邊框。除了我無法滾動圖標,一切都很可愛。我嘗試了/不設置滾動模式。我試過了一個從屏幕上掉下來的拉伸圖標。我已經嘗試了一切。我究竟做錯了什麼?

+0

這個主題在第一/唯一款[documentation](https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CAScrollLayer_class/Introduction/Introduction.html#//apple_ref/occ/cl/CAScrollLayer)。 – 2014-04-11 22:06:05

回答

3

CAScrollLayer不會插入UIEvent鏈,因此您需要手動添加代碼以修改觸摸事件的滾動偏移。獲得像UIScrollView一樣的滾動動力也非常棘手。我強烈建議用UIScrollView重新實現 - 這將會非常簡單。唯一的其他選擇是做手動觸摸事件處理,這很痛苦!我試圖用CAScrollLayer獲得一個不錯的滾動條,並在手動執行了一些令人尷尬的滾動行爲後放棄了。

我使用CALayer或UIView的一般規則是當我不需要任何用戶交互時使用CALayer對象。如果用戶要觸摸它,請使用UIView,它是一個非常輕量級的對象,因此開銷可以忽略不計。

這就是說,我發現CAScrollLayer非常無用!爲什麼不使用CALayer並修改邊界?這可能有一些用處,但它不能替代UIScrollView。

+0

謝謝,我得到了幾乎相同的結論。想要確保我沒有瘋狂。那麼簡而言之,CAScrollLayer不會實現用戶啓動的滾動?我發現很難找到描述該組件的正確或推薦使用的在線示例。 – Cliff 2010-04-28 19:09:58

+0

圖層不是響應者鏈的一部分。通過後臺視圖捕獲您想要觸發的事件(觸摸),並讓視圖調用圖層,告訴它要滾動到哪個點或矩形。此外,Apple還提供了一個使用CAScrollLayer - CALayerEssentials的示例。 – Mark 2011-01-17 18:06:59

+0

然而,CALayerEssentials示例代碼並不是非常有用,它只是通過移動到圖像指南針位置的按鈕來實現「滾動」。這無助於某人尋找真正的界面滾動示例,無論是通過觸摸事件還是鼠標事件(在Mac上)。 – Dov 2011-07-08 14:50:21

0

嘗試添加到您的示例滾動編程層:

- (void)scroll { 
[scrollLayer scrollToPoint:scrollPoint]; 
scrollPoint.x += 10; 
[self performSelector:_cmd withObject:nil afterDelay:0.1]; 
} 

,並在初始化方法的最後補充一點:

scrollPoint = CGPointMake(0, 0); 
[self scroll];