web-dev-qa-db-ja.com

プログラムでiOS 7のコントロールセンターを無効にすることは可能ですか?そうでない場合、代替手段は何ですか?

下から上にスワイプするジェスチャーを使用するアプリを開発しました。それはiOS 6で完全に機能していましたが、今やiOS 7が出て、おそらく25回に1回は機能します。ほぼ毎回iOS 7コントロールセンターを取得しています。明らかに、コントロールセンターは[設定]で無効にできますが、それは電話の所有者次第であり、私はそれを制御できません。したがって、私の質問は、アプリの実行中にコントロールセンターを無効にする方法はありますか?そうでない場合、代替手段は何ですか?その機能の再配置/再加工が唯一のソリューションですか?

28
mike.tihonchik

本当に選択肢はありません。最善の方法は、ユーザーに警告し、設定に移動してオフにするよう依頼することです。

現実的には、それを尋ねるだけで多くのユーザーを失うので、ジェスチャーを変更する必要があります。

11
ilya n.

実際にはオプションがあります。無効にすることはできません。しかし、偶発的な起動を防ぐことができます。ステータスバーを無効にするだけです。次に、スワイプすると、ユーザーはコントロールセンターを起動する必要があるかどうかを尋ねられます。 1回のスワイプで起動することはありません。代わりに、最初のスワイプに矢印が表示され、ユーザーはコントロールセンターを起動するために矢印をクリックしてドラッグする必要があるため、誤って起動することを防ぎます。このコードを使用して、ステータスバーを無効にします。

IOS7でこのデリゲートを使用してステータスバーを無効にできます。

- (BOOL) prefersStatusBarHidden
{
    return YES;
} 

そして、IOS6.1以前のこの方法:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
51
Harikrishnan

prefersStatusBarHiddenの実装に加えて、iOS 11 SDK(Xcode 9でコンパイル)から開始

Objective-C:

- (BOOL) prefersStatusBarHidden
{
    return YES;
} 

Swift 4 +:

override var prefersStatusBarHidden: Bool { return true }

preferredScreenEdgesDeferringSystemGestures も実装する必要があります。

Objective-C:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures{
    return UIRectEdgeAll;
};

Swift 4 +:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return .all
}

それ以外の場合は、Control/Notification Centerが直接表示されます。最初に上下にドラッグする必要がある上向き/下向き矢印の付いた灰色のボックスを表示する代わりに。

13
JeanLuc