20211125のSwiftに関する記事は5件です。

【SwiftUI】toolbar Modifierの表示位置(iOS)

SwiftUIのtoolbarの表示位置です。 全12種で細かい事を言う並びに優先順があるので全部違います。 サンプルコード NavigationView{ Text("Hello, World!") .toolbar{ ToolbarItem(placement: .navigationBarLeading){ Text("leading") } } } } NavigationView内のViewに.toolbar Modifierをつけます。 中にはToolbarItemを使って配置します。 引数placementにToolbarItemPlacementで位置の指定を行います。 対応表 ToolbarItemPlacement(左から順) 表示位置 備考 .navigationBarLeading 左上(leading) .cancellationAction 左上(leading) .navigation 左上(leading) .principal 中央(center) .automatic 右上(trailing) .navigationBarTrailing 右上(trailing) .primaryAction 右上(trailing) .destructiveAction 右上(trailing) confirmationActionと同じ優先順位 .confirmationAction 右上(trailing) destructiveActionと同じ優先順位太文字(bold) .bottomBar 下部(bottom) デフォルトは中央statusがあると左端 .status 下部(bottom) .keyboard キーボード 実際に使うものは? 以下の4つが主になると思います。 .navigationBarLeading .navigationBarTrailing .bottomBar .keyboard 中身はHStackで配置できるので、無理に色々使わずにHStackで並べた方が無難です。 無理に複数使って並べて順序がおかしくなることのないようにしましょう。 余談 iOSバージョンについて toolbarはiOS14から使用出来ます。 navigationBarItemが非推奨になったので、問題が無ければ随時置き換えを行いましょう。 .keyboardはiOS15からです。 iOS14では使用出来ないので注意して下さい。 ブログ記事の紹介 ツールバーについて更に説明が見たい方はこちら ToolbarItem無しで簡易的な使い方をする場合や、 複数並べた場合のサンプルコード、 キーボードについての補足などがあります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【SwiftUI】キーボードを閉じる方法(iOS15)

SwiftUIを使ってソフトウェアキーボードを閉じる方法です。 概要 @FocusStateを使用し入力フォームのフォーカスを外す事でソフトウェアキーボードを閉じます。 コード import SwiftUI struct FocusStateBoolView: View { @State var text = "" @FocusState var focus:Bool var body: some View { Form { TextField("TextField", text: self.$text) .focused(self.$focus) Button("Focus ON"){ self.focus = true } Button("Focus OFF"){ self.focus = false } } } } 解説 ソフトウェアキーボードを閉じるにはフォーカス(選択状態)を解除するする必要があります。 iOS15からは変数でフォーカスの状態を保持できる様になった為、 これを用いてフォーカスを外してキーボードを閉じます。 なお、標準ではreturnキーを押すか、Viewを非表示にする事でフォーカスが外れます。 思うように外す事が出来ない場合があるため、閉じる機能を提供する必要がある場合もあります。 @FocusState フォーカスの状態を変数で保持するために、 iOS15から追加された@FocusStateを使用します。 @Stateの様にメンバ変数の前につけます。 @FocusState var focus:Bool この時使える変数はBool又はHashableを実装したものです。 AppleのドキュメントではenumにHashableを実装して使用しています。 .focused 次にModifierの.focusedを使います。 TextField("TextField", text: self.$text) .focused(self.$focus) これで変数とフォーカスの状態が紐付けられました。 この変数のtrue/falseを切り替える事でフォーカスが切り替わり、 ソフトウェアキーボードの開閉が行われます。 余談 シミュレータについて シミュレータでソフトウェアキーボードを使う際は「shift+cmd+K」で切り替えられます。 I/Oの項目からの切り替えも出来ます。 ブログ記事の紹介 本記事は試験的にQiita用に要点を絞って簡潔にまとめて書いてみました。 ブログには細かな検証や複数の例を載せていますが、Qiita簡潔に最低限にする予定です。 好みがあると思うので使い分けて下さい。 以下のブログには詳細な説明や他のコード例があります。 ソフトウェアキーボードを閉じる方法(iOS14以前やUIの実装も含む) @FocusStateの解説
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Swift】画面の戻り方のまとめ

Swiftで画面を戻る処理が何種類かあるのでまとめてみました。 モーダル型で戻る self.dismiss(animated: true, completion: nil) dismissで画面を破棄しています。 モーダル型で2つ前の画面に戻る self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil) 2つ前の画面に戻るコードです。 1つ前の画面へ戻る(NavigationController) self.navigationController?.popViewController(animated: true) NavigationControllerで1つ前の画面へ戻る処理。 トップの階層へ戻る(NavigationController) self.navigationController?.popToRootViewController(animated: true) NavigationControllerでトップの階層へ戻る処理。 任意の階層へ戻る(NavigationController) self.navigationController?.popToViewController(navigationController!.viewControllers[階層の番号], animated: true) NavigationControllerで任意の階層へ戻る処理。 *戻るだけで先に進むことはできません。 参考 https://naoya-ono.com/swift/navigation-controller-back/ https://qiita.com/Walkdream24/items/787df7d5b6e85330416a
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

投稿テスト

test
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AVAudioPlayer の再生。

このAVAudioPlayerは、簡単にPlayersのインターバルが取得できる特徴がある。 class ViewController: UIViewController { var player = AVAudioPlayer() var url = NSUNL() var slider = UISlider() var Tim = Timer() override func viewDidLoad(){ url = URL(string: “https://url/audio_file.m4a”)! as NSURL player = try! AVAudioPlayer(contentsOf: url as URL) PlayMusic() slider.frame = CGRect(x: 10, y: self.view.frame.size.height-44, width: self.view.frame.size.width-20, 44) self.view.addSubview(slider) let btn1 = UIButton() btn1.frame = CGRect(x: 0, y: 300, width: 320, height: 40) btn1.addTarget(self, action: #selector(playing(playing:)), for: .touchUpInside) self.view.addSubview(btn1) } func PlayMusic(){ let t = player.duration let t2 = player.currentTime slider.maximumValue = Float(t) slider.minimumValue = 0.0 slider.value = Float(t2) Tim = Timer.scheduledTimer(interval: 0.1, target: self, selector: #selector(tim(tim:)), userInfo: nil, repeats: true) } @objc func playing(playing: UIButton){ plsyer.play() PlayMusic() } @objc tim(tim: Timer){ let t = player.duration let t2 = player.currentTime slider.maximumValue = Float(t) slider.minimumValue = 0.0 slider.value = Float(t2) } } URLは独自のものを使ってください。 AVAudioPlayerはiOSのデバイス内の音声出力は確認できていますが、外部URLはどうか? ボタンタップからの再生で、スライダーだけの UIの実装です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む