2013-10-16 18 views
9

Có vẻ như các thiết bị iOS khác nhau hiển thị UINavigationBar s với barStyle = UIBarStyleBlacktranslucent = YES rất khác nhau. Xem xét:Làm cách nào để phát hiện xem thiết bị iOS có hỗ trợ hiệu ứng mờ không?

iPhone 4, không màu: iPhone 4, no tint

iPhone 5, không có màu: 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 tạo ra ef mong muốn không có màu, nhưng 4 thì mờ. Việc thêm tông màu bán trong suốt làm cho 4 trông đẹp, nhưng vít lên 5.

Điều này cũng đúng với iPad 2 và 3 và về mặt lý thuyết mọi thiết bị không hỗ trợ hiệu ứng làm mờ iOS 7.

Viết tắt danh sách cấm các thiết bị cũ hơn, làm cách nào tôi có thể phát hiện xem thiết bị có hỗ trợ làm mờ để tôi có thể hoạt động có điều kiện xung quanh sự khác biệt hiển thị không? Hay có cách nào để bình thường hóa diện mạo mà không sử dụng một chút màu nào?

+0

Không có API công cộng cho rằng mặc dù nhà phát triển được nhà phát triển liên tục yêu cầu từ hạt beta 1. Kiểm tra mô hình thiết bị không phải là giải pháp vì người dùng có thể tắt nó trên các thiết bị mới hơn. –

+0

@FilipRadelic Whoa, thật sao? Làm cách nào để vô hiệu hóa hiệu ứng trên thiết bị mới hơn? –

+3

Cài đặt -> Chung -> Khả năng truy cập -> Tăng độ tương phản –

Trả lời

0

Tôi nghĩ câu hỏi này là những gì bạn muốn làm. Chỉ cần viết mã có điều kiện cho các thiết bị khác nhau:

Determine device (iPhone, iPod Touch) with iPhone SDK

+0

Như tôi đã nói trong câu hỏi, đó là cách giải quyết hầu hết thời gian, nhưng đó không phải là giải pháp thực. –

1

gì về loại UIDevice này cùng với quan sát cho UIAccessibilityReduceTransparencyStatusDidChangeNotification?

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

Đừng quên #include trong tệp triển khai của bạn.

Các vấn đề liên quan