自定义uipicker-处理图像大小

时间:2012-11-26 23:48:38

标签: ios uipicker

enter image description here

-(UIView *)pickerView:(UIPickerView *)pickerView
           viewForRow:(NSInteger)row
         forComponent:(NSInteger)component reusingView:(UIView *)view
{
    //NSLog(@"%d",component);
   // NSLog(@"tag: %d",pickerView.tag);

    if([pickerView isEqual:picker1])

    {


        NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
        NSArray *array1 = [self valueForKey:arrayName];
        UIImageView *imageView = [array1 objectAtIndex:row];
        if ([pickerView selectedRowInComponent:component] == row) {
            imageView.frame = CGRectMake(60,60,40,80);//set bigger frame
        } else {
            //imageView.frame = CGRectMake(30,30,20,60);//set normal frame
        }
        return imageView;
        }

}

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
    return 80.0;

}

我正在实现自定义uipicker以实现第一个以下图像。我用uipicker选择了三张图片。但是,所有这些都显示在下面第二张图片的屏幕上。我想只在中间显示占据更大的尺寸而不是其他图像如图所示。

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

更新:根据您的评论,您需要将中间行设置得更大。

将viewForRow方法修改为,

- (UIView *)pickerView:(UIPickerView *)pickerView
           viewForRow:(NSInteger)row
         forComponent:(NSInteger)component reusingView:(UIView *)view
{
    //NSLog(@"%d",component);
    NSLog(@"tag: %d",pickerView.tag);

    if(pickerView.tag==1)
    {   NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
        NSArray *array1 = [self valueForKey:arrayName];
        UIImageView *imageView = [array1 objectAtIndex:row];
        if ([pickerView selectedRowInComponent:component] == row) {
           imageView.frame = CGRectMake(..);//set bigger frame
        } else {
           imageView.frame = CGRectMake(..);//set normal frame
        }
        return imageView;
    }

实施pickerView:rowHeightForComponent:方法并为行设置合适的高度。

    - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {

要隐藏选择指标,请设置showsSelectionIndicator UIPickerView属性。有关详细信息check apple doc.

根据您的评论,

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
      [pickerView reloadComponent:component];
}

答案 1 :(得分:0)

任何人都需要帮助!这是解决方案。所有积分都转到@ACB !!!

-(UIView *)pickerView:(UIPickerView *)pickerView
               viewForRow:(NSInteger)row
             forComponent:(NSInteger)component reusingView:(UIView *)view
    {
        //NSLog(@"%d",component);
       // NSLog(@"tag: %d",pickerView.tag);

        if(pickerView.tag==1)

        {


            NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
            NSArray *array1 = [self valueForKey:arrayName];
            UIImageView *imageView = [array1 objectAtIndex:row];
            if ([pickerView selectedRowInComponent:component] == row) {
                imageView.frame = CGRectMake(60,60,40,80);//set bigger frame
            } else {
                imageView.frame = CGRectMake(30,30,20,60);//set normal frame
            }
            return imageView;

            //NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
            //NSArray *array1 = [self valueForKey:arrayName];
            //return [array1 objectAtIndex:row];
        }
        else if([pickerView isEqual:picker2])
        {
            NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+5];
            NSArray *array1 = [self valueForKey:arrayName];
            UIImageView *imageView = [array1 objectAtIndex:row];
            if ([pickerView selectedRowInComponent:component] == row) {
                imageView.frame = CGRectMake(60,60,40,80);//set bigger frame
            } else {
                imageView.frame = CGRectMake(30,30,20,60);//set normal frame
            }
            return imageView;


            /* NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+5];
            NSArray *array2 = [self valueForKey:arrayName];
            return [array2 objectAtIndex:row];*/
        }
        else
        {
            NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+9];
            NSArray *array1 = [self valueForKey:arrayName];
            UIImageView *imageView = [array1 objectAtIndex:row];
            if ([pickerView selectedRowInComponent:component] == row) {
                imageView.frame = CGRectMake(60,60,40,80);//set bigger frame
            } else {
                imageView.frame = CGRectMake(30,30,20,60);//set normal frame
            }
            return imageView;



           /* NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+9];
            NSArray *array3 = [self valueForKey:arrayName];
            return [array3 objectAtIndex:row];*/
        }

    }

    - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
    {
        return 120.0;

    }

    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
        [pickerView reloadComponent:component];
    }