私のアプリは を使用していますがUIBlurEffect
、古いデバイス (特に iOS 8 をサポートする iPad 2 および 3) はぼかしをサポートしていません。
ユーザーのデバイスがぼかしをサポートしているかどうかを確認したいと思います。どうすればいいのですか?
私のアプリは を使用していますがUIBlurEffect
、古いデバイス (特に iOS 8 をサポートする iPad 2 および 3) はぼかしをサポートしていません。
ユーザーのデバイスがぼかしをサポートしているかどうかを確認したいと思います。どうすればいいのですか?
UIDevice
には有望な内部メソッド[UIDevice _graphicsQuality]
がありますが、もちろんあなたのアプリは Apple によって拒否されます。独自のメソッドを作成しましょう。
まず、作業している正確なデバイス タイプを知る必要があります。
#import <sys/utsname.h>
NSString* deviceName()
{
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
}
iPad2,1
これは、たとえば iPad 2 で返されるはずです。iDevice モデルの最新リストは次のとおりです: https://theiphonewiki.com/wiki/Models
そこで、デバイス モデルを 2 つのグループに分類しましょう。グラフィック品質が低い (したがってぼかしをサポートしていない) ものと、グラフィック品質が優れているものです。私の調査によると、これらは Apple が「貧弱な」グラフィックスと見なすデバイスです (これらは将来変更される可能性があります)。
iPad iPad iPad1,1 iPhone1,1 iPhone1,2 iPhone2,1 iPhone3,1 iPhone3,2 iPhone3,3 iPod1,1 iPod2,1 iPod2,2 iPod3,1 iPod4,1 iPad2,1 iPad2,2 iPad2,3 iPad2,4 iPad3 ,1 iPad3,2 iPad3,3
したがって、次のコードを記述します。
NSSet *graphicsQuality = [NSSet setWithObjects:@"iPad",
@"iPad1,1",
@"iPhone1,1",
@"iPhone1,2",
@"iPhone2,1",
@"iPhone3,1",
@"iPhone3,2",
@"iPhone3,3",
@"iPod1,1",
@"iPod2,1",
@"iPod2,2",
@"iPod3,1",
@"iPod4,1",
@"iPad2,1",
@"iPad2,2",
@"iPad2,3",
@"iPad2,4",
@"iPad3,1",
@"iPad3,2",
@"iPad3,3",
nil];
if ([graphicsQuality containsObject:deviceName()]) {
// Device with poor graphics, blur not supported
} else {
// Blur supported
}
デバイスがぼかしをサポートしている場合でも、ユーザーが [設定]、[アクセシビリティ] から高度な視覚効果を無効にしている可能性があるため、注意してください。
代替方法
すばらしい答えをくれたダニエル・マーティンに感謝します。ぼかし効果の可用性について、次のチェックを組み合わせた UIDevice カテゴリを作成しました。
iOS版
デバイスの種類 (Daniel Martin に感謝)
シミュレーター用にビルドするときのプライベート UIDevice メソッド _graphicsQuality。(これは、デバイス タイプのチェックがシミュレーターで機能しないため行われます - アーム アーキテクチャ用にビルドするときにコンパイルされます)
「透明度を下げる」アクセシビリティ設定
カテゴリを含む要点を作成しました: https://gist.github.com/mortenbekditlevsen/5a0ee16b73a084ba404d
そして、問題全体についての小さな記事:
注: Gist を使用する場合は、忘れずに
UIAccessibilityReduceTransparencyStatusDidChangeNotificationアクセシビリティ設定が変更されたときに UI を更新する通知。
誰かがこれが役立つことを願っています。:-)
これを行うには、いくつかの方法があります。
if objc_getClass("UIBlurEffect") != nil {
// UIBlurEffect exists
} else {
// UIBlurEffect doesn't exist
}
または、blurEffect クラスにアクセスして
if let blurEffect: AnyClass = NSClassFromString("UIBlurEffect") {
// UIBlurEffect exists
} else {
// UIBlurEffect doesn't exist
}
タイトルが分かりにくいかもしれませんが、実際には重複した質問があります: How do I do weak linking in Swift?
- 編集 -
質問を誤解しました。デバイス名を確認する以外に、これを見つける方法はないようです。
デバイスが UIVisualEffectView を正しく表示するかどうかを検出しますか?
Apple のフォールバック実装が何であれ、私はそれに依存します。彼らはまだ色合いを適用しているように見えるので、ほとんどの場合はおそらく問題ありません. ぼかしが適用されないときに実際に外観を変更する必要がある場合は、ぼかしをサポートしていないデバイスが具体的に示されているため、デバイス名はひどいものではないと思います。