2010-02-25 2 views
3

어쩌면 그것은 늦기 때문일 수 있습니다. 내가 왜 노력하고 간단한 CSScrollLayer 예제로 문제가 생겼는지 알 수없는 이유가 무엇이든간에. 내가보기 기반 프로젝트 및 initWithNibName에서 호출 내 초기화 방법 (50 픽셀 이클립스 아이콘을 추가 : 번들 : 나는이 있습니다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)를 참조하십시오. –

답변

3

CAScrollLayer가 UIEvent 체인에 연결되지 않으므로 터치 이벤트의 스크롤 오프셋을 수정하는 코드를 수동으로 추가해야합니다. UIScrollView와 같은 스크롤링 기세를 얻는 것은 매우 까다로운 일입니다. UIScrollView로 다시 구현하는 것이 좋습니다. 매우 간단합니다. 유일한 다른 옵션은 고통스러운 수동 터치 이벤트 처리를하는 것입니다! CAScrollLayer를 사용하여 멋진 스크롤러를 얻으려고 시도하고 몇 가지 어색한 스크롤 동작을 수동으로 구현 한 후 포기했습니다.

CALayer 또는 UIView를 사용하여 따르는 일반적인 규칙은 사용자 상호 작용이 필요하지 않을 때 CALayer 개체를 사용하는 것입니다. 사용자가 UIView를 사용하면 매우 가벼운 객체이므로 오버 헤드는 무시할 수 있습니다.

그렇다면 CAScrollLayer는 매우 쓸모가 없습니다. 왜 CALayer를 사용하고 범위를 수정하지 않는가? 아마도 약간의 용도가 있지만 UIScrollView를 대신 할 수는 없습니다. 귀하의 예제이 추가

+0

고마워. 나는 거의 같은 결론에 도달했다. 내가 미쳤다는 것을 확인하고 싶었다. CAScrollLayer는 사용자가 시작한 스크롤을 구현하지 않습니다. 나는이 구성 요소의 적절하거나 권장되는 사용법을 설명하는 온라인 예제를 찾기가 매우 어려웠다. – Cliff

+0

레이어가 응답 체인의 일부가 아닙니다. 백업 뷰로 작업 (터치)하려는 이벤트를 캡처하고보기로 레이어를 호출하여 스크롤 할 점 또는 사각형을 알려줍니다. 또한 Apple은 CAScrollLayer - CALayerEssentials를 사용하여 예제를 제공합니다. – Mark

+0

그러나 CALayerEssentials 샘플 코드는별로 도움이되지 않습니다 - 이미지의 나침반 위치로 이동하는 버튼으로 "스크롤링"만 구현합니다. 터치 이벤트 나 마우스 이벤트 (Mac의 경우)를 통해 실제 인터페이스 스크롤의 예를 찾는 사람에게는 도움이되지 않습니다. – Dov

0

봅니다 프로그래밍 계층 스크롤 :

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

를하고 초기화 방법의 끝이 추가 :이 항목은 최초/유일한 항에 덮여

scrollPoint = CGPointMake(0, 0); 
[self scroll]; 
관련 문제