2013-10-16 16 views
9

異なるiOSデバイスは、barStyle = UIBarStyleBlackととで非常に異なる方法でUINavigationBarを表示しているようです。考えてみましょう: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

ベータシード1以降、開発者が絶えず要求しているにもかかわらず、公開APIはありません。デバイスモデルのチェックは、新しいデバイスでユーザーがオフにできるため、解決策ではありません。 –

+0

@FilipRadelicおお、本当に?新しいデバイスのエフェクトを無効にするにはどうすればよいですか? –

+3

設定 - >一般 - >アクセシビリティ - >コントラストを増やす –

答えて

0

この質問はあなたがしたいことだと思います。 UIAccessibilityReduceTransparencyStatusDidChangeNotificationのための観察と一緒にこのUIDeviceカテゴリについてどう

Determine device (iPhone, iPod Touch) with iPhone SDK

+0

私が質問したように、それはほとんどの場合問題の回避策ですが、実際の解決策ではありません。 –

1

:ちょうど異なるデバイスのための条件付きコードを書くには?

@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してください。

関連する問題