2012-11-07 51 views
1

我在TableViewCell中创建UISwitch在非视网膜屏幕上的UISwitch

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

但是当我在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; 
} 
+0

您可能希望上传问题的照片。很难说什么“严重画的图片意味着”。 – Josiah

+0

我上传了一张图片 – iWheelBuy

+0

我明白你的意思了。 – Josiah

回答

3

首先,在这种情况下,将交换机设置为单元格的accessoryView并让其担心定位会更容易。

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

+0

非常感谢您指出配件视图问题!这是一个很好的解决方案 – iWheelBuy

2

不知道您说的 “画不好画” 的意思。它看起来模糊吗?这可能是因为它的框架没有设置为满分。

你的手机的高度是多少?下面的行可能导致UISwitch被设置在一个点的0.5:

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

这对视网膜细,因为这仍然是一个全像素,但在非视网膜它在0.5的像素(由于点=像素上视网膜上的非视网膜和点= 2像素)。

+0

我已经在20.0f浮动上测试过它。仍然看起来不好... – iWheelBuy

+1

它绝对必须与关闭像素和不正确的帧定位;) – runmad

+0

我已经测试了半像素。确实看起来更好! – iWheelBuy

相关问题