【问题标题】:Custom uipicker- dealing with image size自定义uipicker——处理图片大小
【发布时间】:2012-11-26 23:48:37
【问题描述】:

-(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 选择三个图像。但是,它们都显示在下面第二张图像的屏幕上。我只希望在中间显示占据更大的尺寸而不是如图所示的其他图像。

【问题讨论】:

  • 请发布任何代码,当您为这些图像设置框架时,确切的问题是什么?
  • 将barView 的框架设置为barView.frame = CGRectMake(... 时会发生什么?您只需要为中间的设置一个更大的框架。
  • 怎么样?请给个提示好吗?或任何资源?
  • UIImageView *barView = [[UIImageView alloc] initWithImage:bar]; barView.frame = CGRectMake(.. //set frame here

标签: ios uipicker


【解决方案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 {

为了隐藏选择指示器,设置UIPickerView 的showsSelectionIndicator 属性。更多详情check apple doc.

根据您的评论,

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

【讨论】:

  • 感谢您为您的解决方案提供代码,不胜感激。但是,一旦我实施它并没有给我我想要的确切解决方案。我想要的是选择的部分会比其他部分更占主导地位。请看我上面更新的截图。
  • 我想,我误解了你的问题。到了中间,我认为它是中间的pickerview。在这种情况下,您需要在 pickerview 委托方法中设置框架。
  • @user1724168,在这种情况下,尝试实现- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 方法,看看是否在滚动时被调用。如果是,请在 [pickerView reloadComponent:component]; 中执行此操作
  • @user1724168,检查答案。滚动时是否调用上述didSelectRow 方法?如果是,请检查以上是否解决了您的问题。
  • @user1724168,是否为其他行调用 else 部分 else { imageView.frame = CGRectMake(..);//set normal frame }?
【解决方案2】:

任何需要帮助的人!这是解决方案。所有学分都归@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];
    }

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2012-04-14
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多