iPhone 앱에서 스크롤 가능한 그리드를 어떻게 구현 하시겠습니까?
-
03-07-2019 - |
문제
각각 50 x 50 픽셀 크기의 약 50 개의 이미지가 있습니다. 나는 사용자가 그들 중 하나를 선택하기를 원합니다. 그래서 먼저 나는 uitableview에 대해 생각했지만 그것은 옳은 일이 아닙니다. 많은 화면 공간이 낭비됩니다. 모든 이미지를 다른 이미지 아래에 놓는 대신 6 개의 열과 N 행을 말하면 그리드를 표시하는 것이 좋습니다.
나는 UiscrollView를 사용하여 자동으로 배열하여 그리드처럼 보이도록 UIView 객체로 채우는 것입니다. 그게 갈 길인가요? 아니면 다른 제안이 있습니까?
해결책
앱에서 이미지가있는 NXN 그리드와 UiscrollView가 소유 한 "선"을 그리는 다른 하위 뷰에서 매우 유사한 일을하고 있습니다. 이미지를 그리는 별도의 뷰를 사용하는 것이 좋습니다.
-(void) drawRect(CGRect rect) {
CGRect smallerRect = CGRectMake(x, y, width, height);
[yourImage drawRect: smallerRect];
// repeat as needed to draw the grid
}
또 다른 포스터는 Uiscrollview가 귀하의 견해를 소유하고 있다면 터치 이벤트를 얻을 수 없다고 언급했습니다. 이것은 사실이 아닙니다. 나는 그것을 작동한다. 그래도 다음을 설정해야 할 수도 있습니다.
[yourScrollView setUserInteractionEnabled: YES]
[yourGridView setUserInteractionEnabled: YES]
다른 팁
그만큼 320 도서관 이를 수행하는 수업이 있습니다.
테이블 뷰가 반드시 행 당 하나의 이미지를 보여주는 것을 암시하는 것은 아닙니다. 테이블 셀을 사용자 정의 할 수 있으며 6 개의 50x50 uiimageviews가있는 셀 서브 클래스는 매우 간단합니다. 스크롤보기보다 유연하지 않지만 행당 6 개의 이미지가 목표라면 테이블보기가 가장 빠른 방법입니다.
Three20은 끔찍합니다. 나는 그것을 사용했습니다. 나는 그것을 추천하지 않습니다 ... 그리드를 표시하는 것은 쉽습니다 ...
- (void) reloadGridView
{
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(5, 54, scrollViewWidth, scrollViewHeight8)];
scrollView.delegate = self;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.userInteractionEnabled = YES;
scrollView.scrollEnabled = YES;
[self.view addSubview:scrollView];
int x = 10;
int y = 10;
divisor = 1;
for (int i = 0; i < [self.photosArray count]; i++) {
int buttonTag = divisor;
UIImage *thumb = [UIImage imageWithContentsOfFile:[self thumbPathAtIndex:i]];
//********* CREATE A BUTTON HERE **********
//********* use the thumb as its backgroundImage *******
if(divisor%4==0){
y+=70;
x = 10;
}else{
x += 70;
}
divisor++;
}
[scrollView setContentSize:CGSizeMake(scrollViewWidth, ([self.photosArray count]%4 == 0) ? y : y+100)];
}
그리고 조경에있을 때 6 개의 이미지를 원한다면 - Islandscape를위한 bool을 설정하십시오.
if (isLandscape) {
//change the divisor to change @ 6 instead of 4
}
보다 고급 GridView가 필요한 경우 AQGRIDVIEW (Google IT)를 확인하십시오.