20210414のSwiftに関する記事は7件です。

SceneKitで読み込んだUSDZのアニメーションを止める

自分で作ったUSDZファイルじゃない場合じゃない場合、中身はよくわからんけどとりあえずアニメーションして欲しくない時とかありますよね。ありますよね。 usdzNode.enumerateChildNodes { (node, pointer) in print(node.name) node.removeAllAnimations() } これで止まります。特定のnodeを止めたいときは、プリントしたnodeの名前であたりをつけてremoveAllAnimationsすれば止まります。 ? フリーランスエンジニアです。 お仕事のご相談こちらまで rockyshikoku@gmail.com Core MLを使ったアプリを作っています。 機械学習関連の情報を発信しています。 Twitter Medium
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Swift】【UITableView】セクションに行がない??

概要 TableViewを用いた時にハマったエラー なかなか原因がわからなかったので備忘録です エラー "attempt to insert row 0 into section 0, but there are only 0 rows in section 0 after the update" ビルドしようとするとこのエラーが出てくる TableViewに行を作ろうとしたがセクションに行がなくてクラッシュしたらしい 解決法 TableViewを構築する時の numberOfRowsInSectionが numberOfSectionsになっていただけでしためちゃ簡単だった override func numberOfSections(in tableView: UITableView) -> Int { //code } ↓ override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //code } コード補完で出てきてミスったっぽい
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UISplitViewControllerの優良サンプルソースコード

UISplitViewControllerの、わかりやすいサンプルソースコードに、なかなか辿りつかなかったので、自分用メモなリンクを共有しておきます。 記事 UISplit​View​Controller https://nshipster.com/uisplitviewcontroller/ ソース https://github.com/NSHipster/UISplitViewController-Example
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Swift】RxSwiftをTwitterで知り合った人に教えてもらったPart2

はじめに 前回 今回も教えていただいたことをまとめていこうと思います。 実装 ViewController import UIKit import RxSwift import RxCocoa final class ViewController: UIViewController { @IBOutlet private weak var textField: UITextField! @IBOutlet private weak var button: UIButton! @IBOutlet private weak var label: UILabel! private let disposeBag = DisposeBag() private var viewModel: ViewModelType = ViewModel() override func viewDidLoad() { super.viewDidLoad() // MARK: - Input //bindでViewModelにイベントを送るパターン textField.rx.text.orEmpty .bind(to: viewModel.inputs.text) .disposed(by: disposeBag) //onNextで送るパターン button.rx.tap .subscribe { _ in self.viewModel.inputs.text.onNext("タップ") } .disposed(by: disposeBag) // MARK: - Output //viewModelからoutputをUIパーツにbindするパターン viewModel.outputs.validText .bind(to: label.rx.text) .disposed(by: disposeBag) } } ViewModel import RxSwift import RxCocoa protocol ViewModelInput { //読み取り専用にしたいため、AnyObserver var text: AnyObserver<String> { get } } protocol ViewModelOutput { //ViewでsubsrcibeするためにObservable var validText: Observable<String> { get } } protocol ViewModelType { var inputs: ViewModelInput { get } var outputs: ViewModelOutput { get } } class ViewModel: ViewModelInput, ViewModelOutput { var text: AnyObserver<String> var validText: Observable<String> init() { let _validText = PublishRelay<String>() self.validText = _validText.asObservable() self.text = AnyObserver<String>() { text in //viewからイベントを受け取り、加工したものをoutputにaccept let validText = text.element! _validText.accept(validText) } } } extension ViewModel: ViewModelType { var inputs: ViewModelInput { return self } var outputs: ViewModelOutput { return self } } イベントの送り方受け取り方 Input(View -> ViewModel) 今回はボタンを押した時とテキストフィールドに文字が入力された時にイベントを流します。 以下はbindでviewModelのinputのtextにイベントを送っています。 textField.rx.text.orEmpty .bind(to: viewModel.inputs.text) .disposed(by: disposeBag) こちらはボタンのイベントをviewModelのinputのtextにonNextで送っています。 button.rx.tap .subscribe { _ in self.viewModel.inputs.text.onNext("タップ") } .disposed(by: disposeBag) そして、ViewModelのViewModelInputプロトコルに送るtextを定義しておいて、加工してoutputで返すという流れです。 protocol ViewModelInput { var text: AnyObserver<String> { get } } Output(ViewModel -> View) イニシャライザ内で値を加工し、acceptでoutputにイベントを送ります。 class ViewModel: ViewModelInput, ViewModelOutput { var text: AnyObserver<String> var validText: Observable<String> init() { let _validText = PublishRelay<String>() self.validText = _validText.asObservable() self.text = AnyObserver<String>() { text in let validText = text.element! _validText.accept(validText) } } } viewModelから送られてきたoutputをbindすることで、labelに反映させる。 viewModel.outputs.validText .bind(to: label.rx.text) .disposed(by: disposeBag) おわりに 少しずつ分かってきましたね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UIButtonの画像をアスペクト比を維持してサイズ変更

はじめに UIButtonのサイズ変更に伴い,内部の画像サイズを変更したい場合の方法についてメモしました. 拡大方法 UIButtonいっぱいに画像を拡大. button.imageView?.contentMode = .scaleAspectFit button.contentHorizontalAlignment = .fill // オリジナルの画像サイズを超えて拡大(水平) button.contentVerticalAlignment = .fill // オリジナルの画像サイズを超えて拡大(垂直) 縮小方法 画像の上下左右にマージンを取ることで縮小. button.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 参考 iOS UIButtonの画像の比率を固定して拡縮する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UserDefaultsによるUIColorを保存

はじめに UserDefaultsをExtensionで拡張することで,UIColorを保存できるようにする方法をメモしました. 利用例として,アプリのテーマカラーなどを保存したいときが挙げられます. 方法 以下のコードを記述. extension UserDefaults { func colorForKey(key: String) -> UIColor? { var colorReturnded: UIColor? if let colorData = data(forKey: key) { do { if let color = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(colorData) as? UIColor { colorReturnded = color } } catch { print("Error UserDefaults") } } return colorReturnded } func setColor(color: UIColor?, forKey key: String) { var colorData: NSData? if let color = color { do { let data = try NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: false) as NSData? colorData = data } catch { print("Error UserDefaults") } } set(colorData, forKey: key) } } 参考 Save UIColor With UserDefaults in Swift 5 Working with UserDefaults in Swift How to load and save a struct in UserDefaults using Codable 【Swift】UserDefaultsの使い方
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Admob 8.3.0 で xib の Custom Class へ適用出来ない問題

事象 Admobを導入してネイティブ アドバンス広告を表示しようと試みましたが、日本語ドキュメントの作成済みの UIViews に広告ビューのアセット アウトレットをリンクする手順では、GADNativeAdView(GADUnifiedNativeAdViewから変更になった)を Storyboard -> custom classへ設定することが出来ませんでした。 https://developers.google.com/admob/ios/native/advanced 解決策 xcframework内のViewがxibへ適用できない問題が現状ある為、ワークアラウンドで.hファイルを直接プロジェクトへ追加することで、custom classへ適用できるようになりました。 ファイルはCocoapodsで導入していた為、/Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.xcframework/ios-arm64_armv7/GoogleMobileAds.framework/Headers/GADNativeAd.hをコピーして直接プロジェクトへ追加すれば無事適用することができました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む