###前提・実現したいこと
UIAlertControllerを使用して、モーダルを表示しています。
そこで、UIActivityIndicatorViewを使用し、「ロード中です」的な表示をしたいと思っています。
現在の状況は、インジケーターは表示できるとことまでは出来ていますが、インジケーターの表示位置の調整が難しく、困っています。
UIAlertControllerに表示されているView(UIAlertController.viewの中にあるもの)が取得できれば、Viewの大きさから表示位置を指定できると思い、Viewを取得しようと思ったのですが、方法が分かりません。
また、UIAlertController.view.addSubviewで追加されたUIActivityIndicatorViewの初期位置は、UIAlertController.viewの中にあるものが基準になっていますが、UIAlertController.viewをprintして表示される値は、そのまま画面サイズになりますので使用できません。
実現したいことは、UIAlertControllerに表示されているView(UIAlertController.viewの中にあるもの)を取得し、そこからUIActivityIndicatorViewの位置を変更したいです。
###発生している問題・エラーメッセージ
UIAlertControllerに表示されているViewの取得の方法が分からない。
###該当のソースコード
swift
1 var alretBtn : UIButton = UIButton() 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 alretBtn.frame = CGRect(x: 0, y: 0, width: 200, height: 100) 7 alretBtn.setTitle("アラート表示", for: .normal) 8 alretBtn.setTitleColor(UIColor.blue, for: .normal) 9 alretBtn.addTarget(self, action: Selector("bottonTapped"), for: .touchDown) 10 11 view.addSubview(alretBtn) 12 }
swift
1 func bottonTapped(){ 2 3 // アラート 4 let alert = UIAlertController( 5 title: "アラート表示中", 6 message: "", 7 preferredStyle: UIAlertControllerStyle.alert 8 ) 9 10 // OKボタン 11 let ok = UIAlertAction( 12 title: "OK", 13 style: UIAlertActionStyle.default, 14 handler: nil 15 ) 16 alert.addAction(ok) 17 18 // インジケーター 19 let indicateView : UIActivityIndicatorView = UIActivityIndicatorView() 20 indicateView.activityIndicatorViewStyle = .gray 21 indicateView.center = CGPoint(x: 0, y: 0) 22 23 // アラート表示中の右側に表示したい 24 // indicateView.center = CGPoint(x: alert.view.bounds.width * 0.9, y: alert.view.bounds.height / 2) 25 26 // サイズを表示 27 // print(alert.view.frame) ←画面全体の大きさが取得される 28 // print(alert.view.bounds) ←画面全体の大きさが取得される 29 30 // アニメージョンスタート 31 indicateView.startAnimating() 32 33 // アラートのビューに追加 34 alert.view.addSubview(indicateView) 35 36 // アラート表示 37 present(alert, animated: true, completion: nil) 38 }
###試したこと
indicateView.center = CGPoint(x: alert.view.bounds.width * 0.9, y: alert.view.bounds.height / 2)等で移動してみて、alert.viewが取得したいものではないことを確認しましたが、そこからどうすればいいか分かりません。
###補足情報(言語/FW/ツール等のバージョンなど)
xcode8.2.1
swift3
###解決方法
swift
1 // アラート表示 2 present(alert, animated: true){ 3 completion in 4 5 // 位置の変更 6 // alert.viewに表示位置が入っている 7 indicateView.center = CGPoint(x: alert.view.bounds.width * 0.85, y: alert.view.bounds.height / 2) 8 9 // アニメージョンスタートはこのタイミングで呼ぶ() 10 indicateView.startAnimating() 11 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。