NSTimer在触摸UIScrollview时冻结

时间:2011-05-30 07:31:09

标签: ipad

我正在编写一个基于midi的应用程序。 为了获得精确的midi时钟时序,我使用NSTimer。但在滚动/触摸子视图时,NSTimer会冻结。我试图在子视图中运行Timer,但同样的问题。 有人有想法吗?

这是我的ViewController的代码:

-(void)timerPlay{

    midiclock = [NSTimer scheduledTimerWithTimeInterval:0.5/24 target:self selector:@selector(clocksignal)  userInfo:nil repeats:YES];
}

-(void)clocksignal{
    beatClock ++;

    if (beatClock == 1){
        const UInt8 clock[2] = { 0xF8, 0xF9};
        [midi sendBytes:clock size:2];
    }

    if (beatClock == 2){
        const UInt8 clock[2] = { 0xF8, 0xF9};
        [midi sendBytes:clock size:2];
    }

    .......
    if (beatClock == 24){

        const UInt8 clock[2] = { 0xF8, 0xF9};

        [midi sendBytes:clock size:2];
        beatClock = 1;

    }
}


- (void)viewDidLoad {
    SubView = [[SubView alloc] initWithNibName:@"SubView" bundle:nil];
    [scrollView addSubview:matrixView.view];
    ......
}

1 个答案:

答案 0 :(得分:1)

我认为这是因为你的计时器是在主线程上执行的,比如UI的东西,所以你的Timer必须等待主线程变为“空闲”才能执行它。由于您没有更新UI,因此您无需在主线程上执行代码。

一种解决方案是创建一个新线程(NSThread detachNewThread)并在此处执行循环,或使用GCD,而不是使用NSTimer