2013-10-16 32 views
9

Farklı iOS aygıtlarınıns'yi barStyle = UIBarStyleBlack ve translucent = YES ile çok farklı şekilde oluşturduğu anlaşılıyor. Düşünün:Bir iOS aygıtının bulanıklık efekti destekleyip desteklemediğini nasıl tespit edebilirim?

iPhone 4, hiçbir renk tonu: iPhone 4, no tint

iPhone 5, hiçbir renk tonu: 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 istenilen efekti üretiyor Bir renk tonu olmadan fect, ancak 4 opak. Yarı saydam renk tonu eklemek 4 görünümü iyi yapar, ancak 5.

'u sabitler. Aynı şey iPad 2 ve 3 için de geçerlidir ve teorik olarak iOS 7'yi desteklemeyen tüm aygıtlar efektleri etkiler.

Bu eski aygıtların kara listesinin kısa bir kısmı, bir aygıtın bulanıklığı destekleyip desteklemediğini nasıl algılayabilir, böylece koşullu olarak işleme farklılıklarının etrafında çalışabilirim? Veya herhangi bir renk tonu kullanmadan görünümü normalleştirmenin bir yolu var mı?

+0

Beta tohum 1'den bu yana geliştiriciler tarafından sürekli olarak talep edilmesine rağmen, bunun için herkese açık bir API yoktur. Aygıt modelini kontrol etmek, kullanıcılar daha yeni cihazlarda kapatabildiğinden bir çözüm değildir. –

+0

@FilipRadelic Whoa, gerçekten? Daha yeni bir cihazdaki etkisini nasıl devre dışı bırakabilirim? –

+3

Ayarlar -> Genel -> Erişilebilirlik -> Kontrastı Artırın –

cevap

0

Bu sorunun ne yapmak istediğiniz olduğunu düşünüyorum. Sadece farklı cihazlar için koşullu kodu yazmak için: Ne UIAccessibilityReduceTransparencyStatusDidChangeNotification için gözlemleyerek birlikte bu UIDevice kategori hakkında

Determine device (iPhone, iPod Touch) with iPhone SDK

+0

Soruda söylediğim gibi, bu çoğu zaman işe yarayan bir çözümdür, ancak gerçek bir çözüm değildir. –

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

Uygulama dosyanızda #include yapmayı unutmayın.

İlgili konular