TextViewにテキストの文字列を含む関数があります。そのテキストのフェードを時間の経過とともに変更したいと思います。これは、私が疑問に思っているフェードの実装ではなく、NSTimerのセレクターに2つの引数(アルファ値とフェードする文字の範囲)を渡す方法です。
this の質問を見てきましたが、それでは答えが得られません。
これは私が今持っているものです:
func someFunc(){
var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: 5, "someString", repeats: true)
}
func val(val1: Int, val2: String){
println("printing \(val1) and \(val2)")
}
ただし、「呼び出し中の余分な引数 'セレクター'」エラーが発生します。 2つの引数を渡すことができる必要がありますが、1つの引数を正しく渡すこともできません。関数からval2を削除し、「someString」を削除すると、引数を1つだけ渡すため、関数はすべてのタイムステップで「printing140611230609088」という行を出力します。
オブジェクトを使用して配列を作成し、それをuserInfoに送信します。これを試して:
func someFunc(){
var arr = ["one", "two"]
var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: arr, repeats: true)
}
func val(timer: NSTimer){
//You'll get an array in timer.userInfo
// arr = timer.userInfo.
// Now you'll get you data in each index of arr
}
お役に立てれば.. :)
まず第一に、あなたはあまりにも多くの議論を持っています。次に、funcはNSTimerを受け取るため、AnyObjectまたはNSTimerを使用する必要があります。
したがって、私の提案は、辞書または配列を使用して、次のようにuserInfo引数として渡すことです。
func someFunc(){
var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: ["key1" : 1 , "key2" : "aString"], repeats: true)
}
func val(val : NSTimer?) {
println("printing \(val?.userInfo)")
}
コードを次のように変更しました。
NSTimerを作成しました! someFunc()でメソッドscheduledTimerWithTimeIntervalによって割り当てられる変数。
次に、selectorを文字列タイプとして設定しました(Swiftの推奨構文)
この後、私はserInfoを送信しました。これはval()でtimer.userInfoを使用して取得されます
これがあなたの問題解決に役立つことを願っています。
var timer :NSTimer!
func someFunc(){
timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "val", userInfo:"Userinfo", repeats: true)
}
func val(){
println("printing \(timer?.userInfo) ")
}
注:userInfoでは何でも送信できます。ただし、もちろん、timer.userInfoを使用してuserInfoを取得する必要があります。