[解決済み] 透明なUIViewの後ろでボタンをクリックするにはどうしたらいいですか?
2022-04-19 16:08:48
質問
例えば、1つのサブビューを持つビューコントローラがあるとします。サブビューは画面の中央を占め、すべての側面に100pxの余白があります。そして、そのサブビューの中にクリックするための小さなものをたくさん追加します。新しいフレームを利用するためにサブビューを使用しているだけです(サブビュー内の x=0, y=0 は、実際には親ビューの 100,100 になります)。
次に、サブビューの背後にメニューのようなものがあると想像してください。ユーザーがサブビューの中の小さなものを選択できるようにしたいのですが、そこに何もない場合は、タッチがサブビューを通過して(背景が透明なので)その後ろのボタンに移動するようにしたいのです。
どうすればいいのでしょうか?touchesBeganは通っているように見えますが、ボタンは機能しません。
どうすればいいですか?
コンテナ用のカスタムビューを作成し、以下のように、ポイントが適格な子ビュー内にない場合に false を返すように pointInside: メッセージをオーバーライドします。
Swiftです。
class PassThroughView: UIView {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
for subview in subviews {
if !subview.isHidden && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {
return true
}
}
return false
}
}
Objective Cです。
@interface PassthroughView : UIView
@end
@implementation PassthroughView
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView *view in self.subviews) {
if (!view.hidden && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event])
return YES;
}
return NO;
}
@end
このビューをコンテナとして使用すると、その子のどれもがタッチを受け取ることができますが、ビュー自体はイベントに対して透過的になります。
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] UIViewの下に影を描くには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
IOS8 Development Guide Error Thread 1: signal SIGABRT
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] 文字列の長さを取得する
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] UITextFieldのテキストインセット?