2012-08-27 5 views
1

그래서 ScrollView에 카드가 있습니다. ScrollView는 페이징이 가능해야합니다.ScrollView에서 하나의 요소 스크롤링 관리

목표는 사용자가 하나의 카드 만 가지고 있어도 스크롤 할 수 있어야한다는 것입니다. ScrollView의 프레임을 카드의 그림과 정확히 같은 너비와 높이로 가지고 있기 때문에 ScrollView.contentSize의 폭을 늘리고 한 점을 추가하기로 결정했습니다.

잘 작동하는 것으로 판명되었지만 약간의 결함이 있습니다. 카드를 왼쪽으로 드래그 한 다음 다시 움켜 잡으면 오른쪽으로 조금 움직입니다. (나는 그 한 점의 가치로 생각합니다.). contentSize를 늘리면 이동도 증가합니다 (예를 들어 콘텐츠 크기가 10만큼 증가하면 시프트 값도 10 포인트가됩니다). 그것은 정말로 나를 많이 괴롭 히고 나는 그것을 제거하고 싶습니다.

그 방법에 대한 조언이 있으십니까? 도움을 많이 주시면 감사하겠습니다.

UPD : scrollViewDidEndDecelerating에서 수동으로 카드 중심을 다시 잡으려고 시도했지만 도움이되지 않았습니다. 내 생각 엔 지금은 (0,0)이기 때문에 컨텐츠 오프셋을 올바른 값으로 설정하면 문제를 해결할 수 있지만 그 방법을 알 수는 없다.

UPD2 :

calendarScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 334, 372)]; 
//The cards themselves are 334 points wide too 
calendarScrollView.clipsToBounds = NO; 
calendarScrollView.pagingEnabled = YES; 
calendarScrollView.bounces = YES; 
calendarScrollView.showsHorizontalScrollIndicator = NO; 
calendarScrollView.delegate = self; 

//This part is used in the cycle of creating the cards 
for (...) { 

... 

if (onlyOneCard) { 
    calendarScrollView.contentSize = CGSizeMake(335, 372); 
    onlyOneCard = 0; 
} else { 
    calendarScrollView.contentSize = CGSizeMake(334+offsetInScrollView, 372); //offsetInScrollView is increased by 334 by every end of the iteration of the cycle 
} 

... 

} 

답변

2

true로있는 ScrollView의 반송 속성을 설정할 수 있습니다 : 여기에 내가 지금 사용하는 일부 코드입니다.

스크롤보기 범위를 벗어났다면 항상 돌아옵니다. :)

+0

페이징 사용이 이미 TRUE입니다. – morgan1189

+0

bounces 속성은 어떻습니까? – achi

+0

TRUE로 설정해도 도움이되지 않았습니다. – morgan1189