UIViewを他のビューに追加せずにiPad画面に表示することは可能ですか?
画面の任意の場所をタップしてタップし続けると、タップ位置にビューが表示され、指を離すとすぐにビューが消えます...
注:ビューにタップジェスチャが追加され、全画面が保持されます
5 に答える
他のビューのサブビューでない限り、ビューを表示することはできません。これがiOSシステムの仕組みです。これはビューの階層です。必要に応じて、アプリの最上位のビューであるUIWindowにビューを追加できます。
これがフローティングUIViewを画面に表示する最も簡単な方法だと思います。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var remoteVideoView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let gesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handleGesture(_:)))
remoteVideoView.addGestureRecognizer(gesture)
remoteVideoView.isUserInteractionEnabled = true
}
@objc func handleGesture(_ gesture: UIPanGestureRecognizer) {
// handling code
let translation = gesture.translation(in: self.view)
let remoteVideoView = gesture.view!
remoteVideoView.center = CGPoint(x: remoteVideoView.center.x + translation.x, y: remoteVideoView.center.y + translation.y )
gesture.setTranslation(CGPoint.zero, in: self.view)
}
}
デフォルトではUIViewを追加します。これは非表示にする必要があり、ユーザーが任意の位置に触れると、指の位置に従ってUIViewの位置を設定するだけです。そして、タッチが削除されたら、そのUIViewを非表示にします。
これがお役に立てば幸いです。
ではごきげんよう !!!
サブビューに追加せずにフローティングUIViewを表示することは、明らかに不可能です。IOSシステムはそのように設計されています。アプリケーションごとにウィンドウとルートviewControllerがあります。他のすべてのものがこのviewControllerに追加されます。フローティングUIViewのようなものを実現するには、それをサブビューとしてメインビューコントローラに追加して、必要のないときに表示および削除する必要があります。メインビューは、デバイス画面全体をカバーするルートviewControllerのビューになります。ビューにサブビューを追加および削除する方法を知っていると思います。
ビューを何かに追加する必要があります。他に方法はありません。
フローティングビューを保持する透明なビューを作成します。アルファ値0.0でフローティングビューを追加します。
次に、透明なビューにtouchesBeganを実装します。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began");
myFloatingView.alpha = 1.0;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began");
myFloatingView.alpha = 0.0;
}
もちろん、アルファを少しアニメートして、非常に滑らかな効果を出すこともできます。