2016-07-13 9 views
0

私はUIView AとUIView Bを持っています。Aは、兄弟のサブビューC-Zと共にscrollViewのサブビューです。 BにはUILongPressGestureRecognizerがあり、ドラッグすることができます。 BをAまたはC-Zの中でドラッグすると、何かをする機能があります。しかし、Bが1秒間Aの中にいたときにのみ、その機能が消えたがっています。その2番目の後にBがAの中にいない場合、私は何も起こりたくありません。どうすればこれを達成できますか?私は既にNSTimerを使ってみました。アクションの遅延

timer = NSTimer() 
timer.scheduledTimerWithInterval(1.0,target:self, #selector(fireMethod),userInfo:nil, repeats:Yes) 

一度は動作したように見えましたが、そのあと初めて動作しませんでした。

+0

_you_は何を示唆してみてください?また、[rubber ducky](https://blog.codinghorror.com/rubber-duck-problem-solving/)にお尋ねしましたか?問題をどのように解決しようとしたのか、どのような障害が発生したのかを説明することが重要です。 – paulvs

+1

@paulvs記事をありがとう!私はその質問に取り組むでしょう。 –

答えて

0

ので

self.delay(1) 
{ 
    //code here 
} 
+0

これは、1つのビューが1秒間他のビュー内にとどまることを確認する方法には対処していません。 – paulvs

+0

これをif文に追加して、ビューBが1秒間挿入された場合に関数がどんなものであってもそれを遅らせると、それがビューに含まれていない場合は遅延させて関数を直ちに呼び出す – Konsy

0

は、このコードを試してみてくださいように

func delay(delay:Double, closure:()->()) { 

    dispatch_after(
     dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure) 


} 

は、その後、あなたのUILongPressGestureRecognizerで関数を呼び出すように遅延機能を作成します。

[self performSelector:@selector(yourAction:) withObject:nil afterDelay:2.3];//give delay asper your requirement. 

-(void)yourAction 
{ 
//your reuire code after delay. 
} 
1

このスウィフト3.0

func delayWithSeconds(_ seconds: Double, completion: @escaping() ->()) { 
    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) { 
     completion() 
    } 
} 

使用

delayWithSeconds(1) { 
    //Do something 
}