2013-10-16 6 views
9

Es scheint, dass verschiedene iOS-Geräte UINavigationBar s mit barStyle = UIBarStyleBlack und translucent = YES sehr unterschiedlich rendern. Bedenken Sie:Wie kann ich feststellen, ob ein iOS-Gerät den Unschärfeeffekt unterstützt?

iPhone 4, nicht getönt: iPhone 4, no tint

iPhone 5, keine Tönung: 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

Das iPhone 5 produziert die gewünschte ef Fekt ohne Tönung, aber die 4 ist opak. Ein semitransparenter Farbton lässt die 4 gut aussehen, verschraubt aber die 5.

Dasselbe gilt für das iPad 2 und 3 und theoretisch alle Geräte, die iOS 7 nicht unterstützen.

Wie kann ich feststellen, ob ein Gerät die Unschärfe unterstützt, damit ich die Rendering-Unterschiede bedingt umgehen kann? Oder gibt es eine Möglichkeit, das Erscheinungsbild zu normalisieren, ohne einen Farbton zu verwenden?

+0

Es gibt keine öffentliche API dafür, obwohl diese seit Beta Seed 1 ständig von Entwicklern angefordert wird. Die Suche nach dem Gerätemodell ist keine Lösung, da Benutzer sie auf neueren Geräten deaktivieren können. –

+0

@FilipRadelic Whoa, wirklich? Wie kann ich den Effekt auf einem neueren Gerät deaktivieren? –

+3

Einstellungen -> Allgemein -> Eingabehilfen -> Kontrast erhöhen –

Antwort

1

Was ist mit dieser UIDevice Kategorie zusammen mit für UIAccessibilityReduceTransparencyStatusDidChangeNotification beobachten?

@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; 
} 

Vergessen Sie nicht, #include in Ihrer Implementierungsdatei zu enthalten.

Verwandte Themen