2013-10-16 93 views
9

看来,不同的iOS设备呈现UINavigationBarbarStyle = UIBarStyleBlacktranslucent = YES非常不同。试想一下:如何检测iOS设备是否支持模糊效果?

iPhone 4,没有色调: iPhone 4, no tint

iPhone 5,没有色调: iPhone 5, no tint

iPhone 4,barTintColor = [UIColor colorWithWhite:0.0f alpha:0.5f]iPhone 4, tinted

iPhone 5,barTintColor = [UIColor colorWithWhite:0.0f alpha:0.5f]iPhone 5, tinted

iPhone 5产生所需的ef没有色彩的效果,但4是不透明的。添加半透明色调使4看起来不错,但拧紧了5.对于iPad 2和3以及理论上不支持iOS 7模糊效果的任何设备,情况也是如此。

将这些较旧的设备列入黑名单,如何检测设备是否支持模糊处理,以便可以有条件地解决渲染差异问题?还是有没有一种方法来正常化外观而不使用色调?

+0

尽管开发商不断要求beta版种子,但仍然没有公开API。检查设备型号不是解决方案,因为用户可以在新设备上关闭设备。 –

+0

@FilipRadelic哇,真的吗?如何禁用新设备上的效果? –

+3

设置 - >常规 - >辅助功能 - >增加对比度 –

回答

1

怎么样与观察为UIAccessibilityReduceTransparencyStatusDidChangeNotification沿着这条的UIDevice类?

@interface UIDevice (Additions) 

@property (readonly) NSString *platform; 
@property (readonly) BOOL canBlur; 

@end 


@implementation UIDevice (Additions) 

- (NSString *)platform { 
    int mib[] = { CTL_HW, HW_MACHINE }; 
    size_t len = 0; 
    sysctl(mib, 2, NULL, &len, NULL, 0); 
    char *machine = malloc(len); 
    sysctl(mib, 2, machine, &len, NULL, 0); 
    NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
    free(machine); 

    return platform; 
} 

- (BOOL)canBlur { 
    if(NSStringFromClass([UIVisualEffectView class]) && UIDevice.currentDevice.systemVersion.floatValue >= 8.0 && !UIAccessibilityIsReduceTransparencyEnabled()) { 
     NSString *platform = self.platform; 
     CGFloat deviceVersion = [[[platform stringByReplacingOccurrencesOfString:@"[^0-9,.]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, platform.length)] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue]; 

     if([platform isEqualToString:@"i386"] || [platform isEqualToString:@"x86_64"]) { 
      return YES; 
     } else if([platform rangeOfString:@"iPhone"].location != NSNotFound) { 
      return (deviceVersion >= 4.1); 
     } else if([platform rangeOfString:@"iPod"].location != NSNotFound) { 
      return (deviceVersion >= 5.1); 
     } else if([platform rangeOfString:@"iPad"].location != NSNotFound) { 
      return (deviceVersion >= 3.4); 
     } 
    } 

    return NO; 
} 

不要忘记#include在你的实现文件中。

相关问题