2012-08-28 53 views
0

我有一個自定義的UIView,它是另一個類的代理,它不斷地向它發送消息(更新UILabel的文本)。這個自定義視圖也有一個UIScrollView作爲子視圖。問題是,當我平移/縮小滾動視圖時,沒有收到委託消息(僅在交互完成後)。在平移/縮放時接收委託消息

我怎樣才能讓它始終接收消息?


這是其他類如何將消息發送給它的委託:

[NSTimer scheduledTimerWithTimeInterval:1.0 
            target:self 
            selector:@selector(onTick:) 
            userInfo:nil 
            repeats:YES]; 


    - (void)onTick:(NSTimer *)timer { 
     NSString *label = ... 

     if ([delegate respondsToSelector:@selector(updateLabelText:)]) { 
      [delegate updateLabelText:label]; 
      [delegate updateLabelText:label]; 
     } 

     ... 

    } 
+1

發佈相關代碼。 – Bourne

+0

多線程,使用Grand Central Dispatch或NSOperation。但一定要在主線程/隊列中完成UI工作! –

+1

手勢跟蹤是在特殊的運行循環模式下完成的。你的「其他班級」如何/何時發送委託消息?如果通過定時器等,您可能需要將該定時器添加到適當的運行循環模式。請參閱Apple的NSRunLoop參考和線程編程指南。 –

回答

0

添加UIPanGestureRecognizer/UIPinchGestureRecognizer您的UIScrollView,並聽取代表們的方法:

Regulating Gesture Recognition 
– gestureRecognizerShouldBegin: 
– gestureRecognizer:shouldReceiveTouch: 
Controlling Simultaneous Gesture Recognition 
– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 
+0

我不想添加任何自定義的UIGestureRecognizer。我想依靠scrollview的默認滾動/縮放行爲。 – developer110

+0

他們不會相互抵消... – mientus

0

使用[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];解決問題。謝謝@Jens Kilian!