質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

223閲覧

画面上に設置したUIViewを自由落下させたい

swiftbeginer

総合スコア13

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/01 15:14

前提・実現したいこと

画面の上に設置したUIViewを自由落下させるプログラム
を作成したのですが、実行中にエラーが発生しています。
コンパイルは成功しています。
解決策をご存知の方、ご教授ください。

発生している問題・エラーメッセージ

2018-08-01 23:54:02.349816+0900 freefall2[843:437715] -[UIView copyWithZone:]: unrecognized selector sent to instance 0x159dc1220
2018-08-01 23:54:02.351852+0900 freefall2[843:437715] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView copyWithZone:]: unrecognized selector sent to instance 0x159dc1220'
*** First throw call stack:
(0x1834f6d8c 0x1826b05ec 0x183504098 0x18d5e9db0 0x1834fc5c8 0x1833e241c 0x1016060c8 0x100bdf828 0x183e4c44c 0x18d5a75a0 0x18d7797e4 0x183404b24 0x18d7781f4 0x18d5a9aa8 0x18d1ed074 0x18d111b14 0x18d111a50 0x18d102ce4 0x18d101b18 0x18d18f62c 0x18d105274 0x18d0d25e0 0x18d702b1c 0x18d0d1dd0 0x18d0d1c6c 0x18d0d0afc 0x18dd6684c 0x18d0d01ec 0x18db4bac8 0x18dc99bf8 0x18d0cfc0c 0x18d0cf5a8 0x18d0cc5e0 0x18d0cc330 0x185cf8470 0x185d00d6c 0x1018f919c 0x1019057cc 0x185d2c878 0x185d2c51c 0x185d2cab8 0x18349f404 0x18349ec2c 0x18349c79c 0x1833bcda8 0x1853a2020 0x18d3dc758 0x100be1980 0x182e4dfc0)
libc++abi.dylib: terminating with uncaught exception of type NSException

該当のソースコード

import UIKit

class ViewController: UIViewController {

@IBOutlet var ball: [UIView]! var dynamicAnimator: UIDynamicAnimator! override func viewDidLoad() { super.viewDidLoad() startGame() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func startGame(){ let gravityBehavior = UIGravityBehavior(items: self.ball) dynamicAnimator = UIDynamicAnimator(referenceView: self.view) dynamicAnimator.addBehavior(gravityBehavior) }

}

試したこと

「var dynamicAnimator: UIDynamicAnimator!」の部分に
ブレークポイントを設定した結果、次の行までの間に
エラーが発生しているようです。

補足情報(FW/ツールのバージョンなど)

Xcode9.4.1で作成しています。
テストに使っているipadのOSは11.4.1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/08/02 00:31

コードはこれだけですか?ViewControllerのConnections inspectorのスクリーンショットを載せてください。
guest

回答1

0

ベストアンサー

@IBOutlet var ball: [UIView]!をどのようにしてstoryboard(またはxib)に紐づけていますか?
(UIView配列を紐付ける方法がある?)
単純にシングルページアプリを作って@IBOutlet var ball:UIView!をstoryboardに新たに配置したViewと紐づけてあげてlet gravityBehavior = UIGravityBehavior(items: [ball])とすると想定通りの動きになりました。(UIDynamicAnimator初めて使いました、面白いですね。)

import UIKit class ViewController: UIViewController { @IBOutlet var ball:UIView! var dynamicAnimator: UIDynamicAnimator! override func viewDidLoad() { super.viewDidLoad() startGame() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func startGame(){ let gravityBehavior = UIGravityBehavior(items: [ball]) dynamicAnimator = UIDynamicAnimator(referenceView: self.view) dynamicAnimator.addBehavior(gravityBehavior) } }

投稿2018/08/02 07:03

razuma

総合スコア1313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/08/02 07:27

>>UIView配列を紐付ける方法がある? Outlet Collectionを使うと複数のアウトレットを配列に紐付けできます。
razuma

2018/08/02 07:40 編集

おお、本当ですね。知りませんでした(お恥ずかしいです、勉強になりました。) 紐付けできていれば投稿者様の該当コードでも動きましたので紐付けだけの問題のようですね。
swiftbeginer

2018/08/02 10:33

>razuma様 ご回答いただいたコードで動作しました。ありがとうございます。 今回のソースではUIviewは一つでしたので、配列の紐付けをしなくてよかったのに、ball:UIviewを無理に書き換えて[]でくくってしまったのが間違いだったみたいです。(参考書の誤りに気づけませんでした。) >fuzzball様 ソースコードが足りていなくて申し訳ありません。 配列の紐付けはこれからチャレンジするので、参考にさせていただきます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問