2011-12-04 2 views
2

화면 공간이 부족하기 때문에 사용자가 휠을 돌릴 때 UIPickerView에서 이미지의 설명 (UILabel이 회전 할 때 pickerView에 나타남)을 표시하려고합니다. viewForRow :를 사용하여 스핀을 감지하고 설명을 표시합니다. 문제는 지금까지 작성한 코드를 사용하여 처음 2 행과 마지막 2 행의 설명을 표시 할 수 없다는 것입니다. 어떤 도움을 크게 감상 할 수회전 할 때 UIPickerView 중앙 행을 감지하는 방법

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    UIImageView *image=[[[UIImageView alloc]initWithImage:[UIImage imageNamed:[zodiacSigns objectAtIndex:row]]]autorelease]; 
    selectedZodiac.frame=CGRectMake(80, 80, 50, 50); 
    selectedZodiac.hidden=NO; 
    @try { 
    //Here -2 is offset of the view in central row 
     selectedZodiac.text=[zodiacSigns objectAtIndex:row-2]; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"Exception caught"); 
    } 
    @finally { 

    } 
    if([yourZodiacPicker selectedRowInComponent:0]!=0) 
    { 
     [self.view insertSubview:selectedZodiac aboveSubview:self.view]; 
    } 
    NSLog(@"reuseView"); 
    return image; 
} 

: 다음은 내 코드입니다!

+0

어쩌면 누군가가 사용자가 휠을 위로 돌렸는지 아래로 돌릴 지 여부를 감지 할 수 있습니다. 저기서 처리 할게. – blackhawk4152

+0

-2 오프셋으로 무엇을 하려는지 이해가 안됩니다. -2를 제거하여 중심 행에 대한 설명을 표시하지 않는 이유는 무엇입니까? 당신은 당신의 문제에 대해 자세히 설명해 주시겠습니까? –

+0

@Pol Mum uForickerview에 새 뷰가 푸시 될 때만 viewForRow : 메서드가 호출되기 때문에 -2 오프셋이 필요합니다. 이는 [row]가 UIPickerView의 마지막 객체 (사용자가 회전 할 때)와 UIPickerView의 최상위 객체 (사용자가 회전 할 때)에 해당하지만 중앙 객체는 해당하지 않음을 의미합니다. UIPickerView 마지막 개체와 중앙 개체 사이의 차이는 -2입니다. 나는 그 질문을 분명히하는 데 도움이되기를 바랍니다. – blackhawk4152

답변

2

정말이 기능이 필요한 경우 가장 좋은 방법은 ScrollView/TableView와 일치하는 오버레이 이미지로 PickerView를 다시 만들 것입니다.

스크롤보기가 중지되면 선택/강조 표시를 비활성화하고 가장 가까운 "셀"로 스크롤합니다.

그런 다음 화면 가운데에있는 셀을 결정하십시오. 내용 앞뒤에보기를 추가해야 사용자가 첫 번째/마지막 셀을 화면 중앙으로 이동할 수 있습니다.

+1

좋은 아이디어. 이를 위해 다음과 같이 시작할 수 있습니다. http://iphonedevelopment.blogspot.com/2009/01/longer-spinning-blurring.html – Chrizzz

-1

내가 잘못 이해했을 수도 있지만, 현재 선택한 이미지에 대한 설명을 표시하는 것이 필요한 경우에는 viewForRow에서 수행하는 대신 pickerView : didSelectRow : inComponent :를 구현하고 거기에 설명 레이블을 설정해야합니다. forComponent : . 당신은 항상 선택 피커 행의 설명을 표시 할 것

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    selectedZodiac.frame=CGRectMake(80, 80, 50, 50); 
    selectedZodiac.hidden=NO; 
    selectedZodiac.text=[zodiacSigns objectAtIndex:row]; 
} 

이 방법 : 그것은이 같은 것입니다.

+0

응답 주셔서 감사하지만, 사용자가 행을 선택할 때가 아니라 회전 할 때만 설명을 표시해야합니다. 사용자가 휠을 돌릴 때 설명이 표시되고 사용자가 행을 선택하면 사라집니다. didSelectRow : 사용자가 휠을 돌릴 때 호출되지 않습니다. 휠이 멈 추면 호출됩니다. 지금은 사용자가 휠을 위로 돌렸는지 아래로 돌릴지를 감지하는 방법 만 알아 내면됩니다. 이 방법은 사용자가 스핀 다운 할 때 -2 오프셋을 적용하고 스핀 업할 때 +2를 적용하여 중심 행을 찾을 수 있습니다. 어쨌든, 응답 주셔서 감사합니다 – blackhawk4152

+1

@ blackhawk4152 음, 알았어. 문제에 대한 쉬운 해결책은 없습니다. 비슷한 질문이 여기에 요청되었습니다 : [http://stackoverflow.com/questions/5237696/read-position-of-pickerview-while-scrolling](http://stackoverflow.com/questions/5237696/read-position-of -pickerview-while-scrolling), 좋은 해결책을 찾지 못했습니다. 그것을 밖으로 확인하지만, 뭔가 다른 일을 더 쉽게 할 수 있습니다. –

관련 문제