###前提・実現したいこと
アプリ作成も少しずつ進んでいますが、
今回もルーレットでのことです。
実現したいのはボタン一つで回転のスタート、ストップを実装しているのですが、
今回ストップをしたときに時間経過とともに回転のスピード(今回の場合1.0)を0.1ずつ減少させていき、ゆっくりと止めたいと思っております
(roulettelayer.speed)
###発生している問題・エラーメッセージ
エラーメッセージは下記のような長文がでました 2017-04-28 14:02:13.524 /*アプリ名*/[9386:893697] -[/*アプリ名*/.RouletteView speedDown:]: unrecognized selector sent to instance 0x7fa5cac0f470 2017-04-28 14:02:13.536 SplitTB[9386:893697] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[/*アプリ名*/.RouletteView speedDown:]: unrecognized selector sent to instance 0x7fa5cac0f470' *** First throw call stack: ( 0 CoreFoundation 0x000000010f162b0b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010ebc7141 objc_exception_throw + 48 2 CoreFoundation 0x000000010f1d2134 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x000000010f0e9840 ___forwarding___ + 1024 4 CoreFoundation 0x000000010f0e93b8 _CF_forwarding_prep_0 + 120 5 Foundation 0x000000010e726f17 __NSFireTimer + 83 6 CoreFoundation 0x000000010f0f6454 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 7 CoreFoundation 0x000000010f0f60e3 __CFRunLoopDoTimer + 1011 8 CoreFoundation 0x000000010f0f5caa __CFRunLoopDoTimers + 266 9 CoreFoundation 0x000000010f0ed9ec __CFRunLoopRun + 1916 10 CoreFoundation 0x000000010f0ed016 CFRunLoopRunSpecific + 406 11 GraphicsServices 0x0000000114faaa24 GSEventRunModal + 62 12 UIKit 0x000000010fecd0d4 UIApplicationMain + 159 13 SplitTB 0x000000010e5bc107 main + 55 14 libdyld.dylib 0x000000011320765d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException
###該当のソースコード
swift
1 var downSpeed:Double! = 1.0 2 let downval:Double! = 0.1 3 var ans:Double! = 0 4 var t:Double!=0 5 6 func spinStop(_ sender: UIView) 7 { 8 let roulettelayer = sender.layer 9 let pauseTime = roulettelayer.convertTime(CACurrentMediaTime(),from: nil) 10 roulettelayer.speed = 0 11 roulettelayer.timeOffset = pauseTime 12 } 13 14 15//上記コードを 16 17//下記コードのようにしました 18 19 var downSpeed:Double! = 1.0 20 let downval:Double! = 0.1 21 var ans:Double! = 0 22 var t:Double!=0 23 24 func spinStop(_ sender: UIView) 25 { 26 downSpeed = 1.0 27 let roulettelayer = sender.layer 28 let pauseTime = roulettelayer.convertTime(CACurrentMediaTime(),from: nil) 29 Timer.scheduledTimer(timeInterval: 0.05,target:self,selector:Selector(("speedDown:")),userInfo:nil,repeats:true) 30 roulettelayer.speed = Float(ans) 31 roulettelayer.timeOffset = pauseTime 32 } 33 34 func speedDown(sender:Timer) 35 { 36 if(downSpeed != 0) 37 { 38 downSpeed = downSpeed - downval 39 ans = downSpeed 40 } 41 else if(downSpeed <= 0) 42 { 43 sender.invalidate() 44 } 45 } 46
###試したこと
Timer関数というものを調べていろいろなサイトをみたりappleのサイトで見たりして調べながら試行錯誤したのですが、どうしてもうまく理解できず滞ってしまいました・・・。
###補足情報(言語/FW/ツール等のバージョンなど)
Swift3,Xcode8.3です
Timer関数の解釈の仕方やここが一番わかりやすいサイト、などご教授いただければ幸いです・・・。
宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー