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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

812閲覧

Timerを一定時間後に止めたいです

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/12/11 09:17

編集2018/12/12 06:09

#やりたいこと

ど初心者です。ご意見・助言いただければ嬉しいです。
Timerで5秒ごとに絵を切り替えるプログラミングを作成したのですが、
これを一通り表示した後、タイマーを止めたいです。
if文でどうにかできるかと試しましたが、文自体が悪いのかダメでした。
どのように対処すれば良いでしょうか。

#対象コード
swift

var timer:Timer! var count:Int = 0 var dispImageNo = 0 var imageView = UIImageView() override func loadView() { let view07A = UIView() view07A.frame = CGRect(x:0, y:0, width:375, height:669) view07A.backgroundColor = .white self.view = view07A } @objc func timerAction(sender:Timer){ count = count + 1 dispImageNo = count % 10 print("カウントダウン") pictureView() } override func viewDidLoad() { super.viewDidLoad() createTimer() } func createTimer () { timer = Timer.scheduledTimer(timeInterval:5.0, target:self, selector: #selector(ViewController_7A.timerAction(sender:)), userInfo:nil, repeats:true) if count >= 10{ timer.invalidate() } DispatchQueue.main.asyncAfter(deadline: .now() + 55.0) { let view07A = UIView() view07A.frame = CGRect(x:0, y:0, width:375, height:669) view07A.backgroundColor = .white self.view = view07A let button07A = UIButton() button07A.frame = CGRect(x:90, y:300, width:200, height:50) button07A.setTitle("次へ", for: .normal) button07A.setTitleColor(UIColor.white, for: .highlighted) button07A.layer.cornerRadius = 20.0 button07A.backgroundColor = .blue self.view.addSubview(button07A) } } func pictureView() { let pictureArray = ["画像", "画像", "画像", "画像", "画像", "画像", "画像", "画像", "画像", "画像" ] let name = pictureArray[dispImageNo] let image = UIImage(named:name) self.imageView.image = image imageView.frame = CGRect(x:0, y:0, width:200, height:300) let screenWidth:CGFloat = view.frame.size.width let screenHeight:CGFloat = view.frame.size.height self.imageView.center = CGPoint(x:screenWidth/2, y:screenHeight/2) view.addSubview(self.imageView) } @objc func tapp(_ sender:UIButton) { let nextvc = ViewController_7A() self.present(nextvc, animated: true, completion: nil) }

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のコードを入力することで解決をしました。

###対象コード
swift
if self.timer.isValid == true {

self.timer.invalidate() }
これDispatchQueue.main.asyncAfter(deadline: .now() + 55.0) の中に 入れたことで解決しました。 ###解決済 全コード

var timer:Timer!

var count:Int = 0

var dispImageNo = 0

var imageView = UIImageView()

override func loadView() {
let view07A = UIView()
view07A.frame = CGRect(x:0, y:0, width:375, height:669)
view07A.backgroundColor = .white
self.view = view07A

}

@objc func timerAction(sender:Timer){

count = count + 1

dispImageNo = count % 10

print("カウントダウン")

pictureView()

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

createTimer()

}

func createTimer () {

timer = Timer.scheduledTimer(timeInterval:5.0,
target:self,
selector: #selector(ViewController_7A.timerAction(sender:)),
userInfo:nil,
repeats:true)

if count >= 10{
timer.invalidate()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 55.0) {

let view07A = UIView()
view07A.frame = CGRect(x:0, y:0, width:375, height:669)
view07A.backgroundColor = .white
self.view = view07A

let button07A = UIButton()
button07A.frame = CGRect(x:90, y:300, width:200, height:50)
button07A.setTitle("次へ", for: .normal)
button07A.setTitleColor(UIColor.white, for: .highlighted)
button07A.layer.cornerRadius = 20.0
button07A.backgroundColor = .blue
self.view.addSubview(button07A)

if self.timer.isValid == true {

self.timer.invalidate() }

}
}
func pictureView() {

let pictureArray = ["画像",
"画像",
"画像",
"画像",
"画像",
"画像",
"画像",
"画像",
"画像",
"画像"
]

let name = pictureArray[dispImageNo]

let image = UIImage(named:name)

self.imageView.image = image

imageView.frame = CGRect(x:0, y:0, width:200, height:300)

let screenWidth:CGFloat = view.frame.size.width
let screenHeight:CGFloat = view.frame.size.height

self.imageView.center = CGPoint(x:screenWidth/2, y:screenHeight/2)

view.addSubview(self.imageView)

}

@objc func tapp(_ sender:UIButton) {

let nextvc = ViewController_7A()

self.present(nextvc, animated: true, completion: nil)
}

}

投稿2018/12/12 06:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問