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

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

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

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

Q&A

解決済

1回答

1806閲覧

Swift〜点滅するanimationをつけたButtonの実装〜

OBN

総合スコア16

Swift

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

0グッド

0クリップ

投稿2019/06/16 02:23

Swift〜点滅するanimationをつけたButtonの実装〜

・アプリの初回起動時のみチュートリアルを表示し、2回目以降の起動時には別のViewを表示するコードを書いたのですが、その中で、2枚目のViewには点滅するanimationを持ったButtonを実装しようと考えコードを書きました。
しかし、buildしてみるとそのButtonは初回起動時には表示されずbuttonとしての機能も使えません。2回目以降の起動時にはButtonのtextのみ表示され、animationは機能しているのですが、タッチしても反応せず、画面遷移が行えません。
おそらく、コードの書き方が間違っているのですが、自分ではどうにもできず、質問させていただきました。お答え頂けると助かります。

該当のソースコード

LoginViewController.Swift

class LoginViewController: UIViewController {

@IBOutlet weak var blinkButton: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
self.startAnimation()
}

private func startAnimation() {

UIButton.animate(withDuration: 2.0, delay: 0.0, options: [.repeat,.autoreverse], animations: { self.blinkButton.alpha = 0.0 }, completion: nil) }

}

App.Delegate.Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if !isNotFirstTime() { setFirstTime() return true } if let window = self.window, let storyboard = window.rootViewController?.storyboard { window.rootViewController = storyboard.instantiateViewController(withIdentifier: "LoginViewController") window.makeKeyAndVisible() } return true } private let Login_Key = "isNotFirstTime" func setFirstTime() { return UserDefaults.standard.set(true, forKey: Login_Key) } func isNotFirstTime() -> Bool { return UserDefaults.standard.bool(forKey: Login_Key) }

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

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

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

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

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

takabosoft

2019/06/17 00:12

self.blinkButton.alpha = 0.2 とかではタップできるようになりませんか?
OBN

2019/06/17 00:57

回答ありがとうございます! 試してみましたが、薄く表示されるだけで、animationは機能せず、依然としてタッチできない状態なので、初回起動時は点滅なしの普通のlabelを置いて、2回目以降の起動時にはbuttonだと、なぜか認識されないので、labelに変えて置いたところ、やりたい事は出来ましたw ですが、気になるので、引き続き回答お待ちしたいと思います。
guest

回答1

0

ベストアンサー

こんにちは。とりあえずわかるところだけ。

以下の検証コードで動かしました。

swift

1class ViewController: UIViewController { 2 3 @IBOutlet weak var blinkButton: UIButton! 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 self.startAnimation() 9 } 10 11 private func startAnimation() { 12 13 UIView.animate(withDuration: 2.0, delay: 0.0, options: [.allowUserInteraction, .repeat, .autoreverse], animations: { 14 15 self.blinkButton.alpha = 0.011 16 17 }, completion: nil) 18 19 } 20 21 @IBAction func tap(_ sender: Any) { 22 print("押された") 23 } 24}

結果:
イメージ説明

ポイントとしては、

  • アニメーション中は操作を受け付けないようになっているので、オプションに.allowUserInteractionを入れてやること
  • UIView.alphaは0.01以下に設定すると当たり判定が効かなくなるので、それより大きい値にしてやること

です。

2回目以降の起動時にはButtonのtextのみ表示され

という辺りは手元では再現していませんので、そちらで調査してください。
(もしくはもう少し再現しやすいソースを載せるなりして質問してください)

投稿2019/06/17 01:29

編集2019/06/17 01:30
takabosoft

総合スコア8356

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

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

OBN

2019/06/17 01:54

回答ありがとうございます! ポイントのご指摘大変助かりました。 ...テストコードで書いてみたところ、思い通りに動作しましたが、今回のケースのApp.Delegate.Swiftで2回目以降の起動時に表示する画面を変える際には、やはり初回起動時にButtonの処理がよばれません。(初回起動時はボタンが認識されず、2回目以降は認識され、animationも動作します。) 現在は初回起動時にanimation付きのButtonを表示する代わりにlabelを置いて誤魔化しています。2回目以降の起動時には点滅するlabelを置く事で、一応やりたい事は出来ました。 なぜ、LoginViewControllerの中の一部の処理だけが呼ばれないのか原因は分からず終いです…。
takabosoft

2019/06/17 02:27 編集

「初回」や「二回目」、という表現が、どの時点からの情報なのかよくわからないんですが、初回はチュートリアル画面へ遷移するので、そもそもボタンをおいている画面は出ないのが普通なのでは?とは思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問