2011-05-11 8 views
1

편집 : 새 프로젝트에서이 코드를 시도하고 예상대로 작동합니다. [[[CCDirector sharedDirector] openGLView]로 추가 된 다음 코드가 cocos2d를 사용하는 OpenGL보기 위에 사용됩니다. addSubview : lsvc.view]; 여기서 lsvc는 scrollview가있는 뷰 컨트롤러입니다. 내가 프로그래밍 방식으로 모든 시뮬레이터에서 잘 작동있는 ScrollView (xcode4, 4.3 SIMUL)를 이동하려고하지만 내 장치에서 작동하지 않는 경우 scrollView scrollRectToVisible 시뮬레이터에서 작동하고 장치에서 작동하지 않습니다.

내가 내있는 ScrollView와 이상한 동작을 (4.3.2)

CGRect frame = self.scrollView.frame; 
frame.origin.x = frame.size.width * self.pageControl.currentPage; 
frame.origin.y = 0; 
[self.scrollView scrollRectToVisible:frame animated:YES]; 

다음이 제가

의 viewDidLoad
self.scrollView.delegate = self; 
[self.scrollView setShowsVerticalScrollIndicator:NO]; 
[self.scrollView setShowsHorizontalScrollIndicator:NO]; 
self.scrollView.pagingEnabled = YES; 
self.scrollView.scrollsToTop = NO; 

int page = 0; 
int pageNum = 3; 
[self.scrollView setContentSize:CGSizeMake(self.scrollView.frame.size.width*pageNum, self.scrollView.frame.size.height)]; 


for (; page < pageNum; page++) { 
    LevelViewController *lvlvc = [[LevelViewController alloc] init]; 
    CGRect frame = self.scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    lvlvc.view.frame = frame; 
    [self.scrollView addSubview:lvlvc.view]; 
    // add the viewcontroller to a saved array to keep track 
    [levelsController addObject:lvlvc]; 
    [lvlvc release]; 
} 
self.pageControl.numberOfPages = page; 

스크롤 번째에있는 ScrollView를 초기화하는 방법이다 난 (값 변화)를 pageControl 이벤트 내에서 스크롤 할 장치에서 패닝에 의한 스크롤 뷰는 훌륭하게 작동합니다. pageControl을 가볍게 두드리면 (20 포인트 이하), 나머지는 스크롤하지 않습니다. 시뮬레이터에서 모두 잘 작동합니다. 할 수있는 방향, 메신저 손실 때문에 확인하는 것에, 내가 그나마 내가 시뮬레이터에 2 개 개의 다른 행동을 얻을 장치 에 나는 또한

[self.scrollView setContentOffset 시도 이유를 알고 누군가 포인트 : CGPointMake을 (frame.size .width * pageNum, 0) animated : YES];

이 또한 시뮬레이터에서만 작동하고 나는 당신의 viewDidLoad에 당신은 addSubview

lvlvc.viw.tag = page+100; 
self.scrollView addSubview:lvlvc.view]; 

전에 스크롤 뷰에 추가하고 pageControl 이벤트는 다음과 같이한다고 볼 수 태그를 추가하기위한

+0

내 UIScrollView에 동일한 문제가 있습니다. 너 혹시 알아 냈어? –

답변

0

UIView *viewToScroll = [self.scrollView viewWithTag: yorPageControl.currentPage+100]; 
[self.scrollView scrollRectToVisible:viewToScroll.frame animated:YES]; 

이상형은 스크롤보기에 고유 태그를 추가 할 때마다 설정합니다. 그리고 페이지 컨트롤이 변경되면 currentPage에 대한 현재 뷰를 가져 와서 스크롤 뷰에 알려 코레네트 rect로 스크롤하십시오.

행운을 빕니다 : D는

+0

같은 문제가 발생했습니다. 이 코드는 시뮬레이터에서 잘 작동하지만 장치가 작동하지 않습니다. (태그를 사용하지 않고 뷰의 배열을 저장하는 등 다른 방법으로 동일한 작업을 수행했습니다) – ultrak

+0

매우 이상합니다. 제품 메뉴에서 청소를 시도 했습니까 -> 정리하고 또한 기기에서 앱을 삭제하고 다시 작성 하시겠습니까? –

+0

그것도 아무것도 시도하지 않았다. 나는 새로운 프로젝트에 내 코드를 파스타로 시험해보고 그것을 체크 할 것이다. 왜 장치의 동작이 시뮬레이터와 다른가요? – ultrak

0

나는이 같은 문제로 실행했습니다 내가 가지고 올 수있는 유일한 해결책은 NO에 의해 scrollRectToVisible 애니메이션 속성을 변경하는 것입니다. 이것은 최적은 아니지만 제대로 작동 할 것입니다.

다른 많은 것들 (메모리 경고, 스크롤 뷰 설정, setContentOffset())을 확인하고 이와 비슷한 수십 개의 게시물을 읽었으며 솔루션을 찾지 못했습니다. scrollRectToVisible 호출은 뷰에서 수신되지 않습니다. scrollViewDidScroll을 설정하고 스 와이프 할 때 호출되는 것을 볼 수 있지만 scrollRectToVisible 호출은 트리거하지 않습니다. 내가 찾은 유일한 점은 scrollRectToVisible에 중단 점을 설정 한 다음 계속하면 더 자주 작동하는 경향이 있다는 것입니다. 따라서 UIScrollView API 애니메이션의 타이밍 버그 일 수 있습니다.

1

최근 프로젝트에서 동일한 문제가 발생했습니다. 해결책은 프레임 속도를 30fps로 떨어 뜨린 다음 scrollRectToVisible을 수행 한 다음 다시 60fps로 설정하는 것입니다.나는 그래서이 떨어졌다 주어진 화면을 입력의있는 ScrollView와 수준의 선택 화면을 HADE 때문에

- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 
    [[CCDirector sharedDirector] setAnimationInterval:1.0/60.0]; 
} 

내가 대리자 호출에서 다시 설정하지 않은 다음있는 ScrollView 위임에 다음

... 
[[CCDirector sharedDirector] setAnimationInterval:1.0/30.0]; 
[scrollView scrollRectToVisible:rect animated:YES]; 
... 

(거기에 애니메이션이 전혀 없었습니다.) 프레임을 떠나서 60fps를 복원했습니다.

희망을 도울 수 있습니다.

+0

이것은 정확합니다. 바로 지금 같은 문제가있었습니다. Apple의 코드는 깨 졌는지 여부에 관계없이 프레임 속도에 의존합니다. – Adam

관련 문제