UISwitch在非视网膜屏幕上

时间:2012-11-07 14:28:04

标签: objective-c ios uiswitch iphone-3gs

我正在UISwitch中创建TableViewCell

在视网膜显示屏上看起来很好。

但是当我在3GS上建立一个项目时,UISwitch看起来像是一幅画得很糟糕的画面。

http://iwheelbuy.com/stackoverflow/asdf.png

我的代码

{
    ...
    cell.textLabel.text = NSLocalizedString(@"settings model glare", nil);
    UISwitch *cellSwitch = [self switchWithTitle:@"glare"];
    [cellSwitch setCenter:CGPointMake(260.0f, cell.frame.size.height / 2)];
    [cell addSubview:cellSwitch];
    ...
}

- (UISwitch *) switchWithTitle:(NSString *)_title
{
    BOOL switchState;
    if ([[NSUserDefaults standardUserDefaults] boolForKey:_title] == NO)
    {
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:_title];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    switchState = [[NSUserDefaults standardUserDefaults] boolForKey:_title];
    UISwitch *switchForCell = [[UISwitch alloc] initWithFrame:CGRectZero];
    if ([_title isEqualToString:@"glare"])
        [switchForCell addTarget:self action:@selector(changedValueForGlare) forControlEvents:UIControlEventValueChanged];
    else
        [switchForCell addTarget:self action:@selector(changedValueForShadow) forControlEvents:UIControlEventValueChanged];
    [switchForCell setOn:switchState];
    return switchForCell;
}

2 个答案:

答案 0 :(得分:3)

首先,在这种情况下,将开关设置为单元格的accessoryView会更容易,让它担心定位。

您看到模糊图像的原因是您的开关框架的原点是半像素。您正在设置交换机的center,因此其来源取决于交换机的大小(已修复,因为UISwitch始终使用系统定义的大小)。所以说开关的尺寸为79 x 27(标准尺寸),将中心的y坐标设置为20将导致框架原点的y坐标为6.5(20.0 - 27.0 * 0.5)。

答案 1 :(得分:2)

不确定“画得很糟糕的图片”是什么意思。它看起来模糊吗?可能是因为它的框架没有设置为满分。

你的细胞高度是多少?以下行可能导致UISwitch设置为0.5点:

[cellSwitch setCenter:CGPointMake(260.0f, cell.frame.size.height / 2)];

这对Retina来说很好,因为它仍然是一个完整的像素,但在非Retina它是0.5像素(因为点=非Retina上的像素和Retina上的点= 2像素)。