UIViewを再描画させたい。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーUIViewを再描画させたい。3,385件1Swift初心者です。勉強のために、二次元図形(円)を描画し、設置したtextfieldに中心座標を入力してreturnを押すと、その座標を中心として円が再描画されるという簡単なアプリを作っています。アプリ起動時に円を描画することはできましたが、textfieldに座標を入力してもそれが反映されず、円がアプリ起動時の座標のまま変化しません。再描画する処理ができていないせいだと思いますが、どのタイミング・場所で再描画を行えば良いかが分かりません。どなたか教えていただけるとありがたいです。以下がコードになります。}}この状態でsimulatorを起動させると、以下の画像のようになります。中心のX座標の初期値は150にしていますので、textfieldに200を入れreturnを押しても、以下の画像のように円の位置が変わっていません。TestDraw.swiftのdraw内にログを仕込んでみたところ、setNeedsDisplay()をしてもdrawが呼ばれていませんでした。TestDraw()で、TestDrawクラスの新しいインスタンスを作成しているのに、それをViewControllerのview階層に付け加える処理がどこにもありません。Viewはインスタンスを作成しただけでは画面には表示されません。赤い円が表示されていると言うことは、画面に表示されているのは、nextViewとは別のインスタンスだと言うことになります。Storyboard上にTestDrawを配置されたので、iOSがViewControllerのインスタンスを作成する時に一緒に作成されたものでしょう。画面に表示されているのはそちらで、nextViewに入っているのとは全く別のインスタンスです。画面に表示されていないインスタンスのプロパティを変更しようが、setNeedsDisplay()を呼び出そうが、そのインスタンスは画面に表示されているのとは別物ですから、draw(_:)は呼ばれませんし、当然画面表示は更新されません。Swiftはオブジェクト指向言語ですから、通常は同じクラスからいくつもインスタンスを作成することができます。自分は一体どのインスタンスを操作しているのかと言うのを意識していかないと、今後も思わぬところで苦労することになるでしょう。TestDraw()のような形の宣言は、意図的に新規のインスタンスを作成したい時にしか使ってはいけないと言うのを頭に叩き込んでおいた方が良いでしょう。コードの修正を最小限で済ませるなら、先の行を次のように修正して見てください。TestDraw!もちろんStoryboard上に配置したTestDrawからこのIBOutletへの接続を正しく行う必要があります。しておけば、iOSが、実際に画面に表示されている方のインスタンスをnextViewにセットしてくれますただ、ついでなので、あまりSwiftっぽくない書き方をしているところを改めてみてはいかがでしょうか。UIViewのサブクラスを作る際には、できるだけsetNeedsDisplay()のようなメソッドを直接呼び出さなくても良いように作ります。あなたのTestDrawクラスはこんな風に書きなおせます。}}Swiftのドット記法で型名が省略できるところは省略してしまっていますが、この辺は趣味の問題もありますので、必ずしも真似する必要はないでしょう。xと書くだけで良くなります。??を使えるSwiftではswitch文のbreakは普通は書かない辺りを気にしてtextFieldShouldReturn(_:)を書き換えるとこんな感じになります。true}atofの挙動とDouble.init(_:)の挙動は違いますから、意図的に使用されていたのかもしれませんし、守った方が良いコーディングルールと言うより趣味の範疇に属する部分もありますが、ご参考にしていただけると幸いです。個の銅バッジご教授ありがとうございます。どのインスタンスを操作しているのかということは全く意識していませんでした。これから注意していきます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。Unwrappingと1storyboardの遷移でエラーが出ます。(segueを使用しない方法で実装)0UIViewを継承したサブクラスにおけるコンストラクタについて。内にContainerViewを作成しStoryboardのUIViewControllerを入れたい0UIViewのアニメーションを連続で実行させるにはどうすれば良いですか。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。