Tempo Slider问题 - Drum Sequencer Obj - C.

时间:2016-04-17 14:35:20

标签: ios objective-c uislider

我正在创造一个简单的鼓机。此功能控制每个播放样本之间的时间(从而控制鼓机的速度)。我需要用滑块来控制速度,所以我希望能够控制到下一步的持续时间。如果可能的话,用这个值。然而,当我试图这样做时,它告诉我"时间是NSDate的一部分"

-(void)run
{
    @autoreleasepool
    {
        // get current time
        NSDate* time = [NSDate date];

        // keeping going around the while loop if the sequencer is running
        while (self.running)
        {
            // sleep until the next step is due
            [NSThread sleepUntilDate:time];

            // update step
            int step = self.step + 1;

            // wrap around if we reached NUMSTEPS
            if (step >= NUMSTEPS)
                step = 0;

            // store
            self.step = step;

            // time duration until next step
            time = [time dateByAddingTimeInterval:0.5];
        }

        // exit thread
        [NSThread exit];
    }
}

这告诉我NSTimeInterval是一个不可复制的类型

     // time duration until next step
        time = [time dateByAddingTimeInterval: self.tempoControls];

这是声明滑块的位置

的.m

- (IBAction)sliderMoved:(UISlider *)sender
{
    AppDelegate* app = [[UIApplication sharedApplication] delegate];

    if (sender == self.tempoSlider)
    {
        PAEControl* tempoControl = app.tempoControls[app.editIndex];
        tempoControl.value = self.tempoSlider.value;
    }
}

·H

@interface DetailController : UIViewController
@property (weak, nonatomic) IBOutlet UISlider *tempoSlider;
- (IBAction)sliderMoved:(UISlider *)sender;

任何帮助都会让我非常感激,提前谢谢。

1 个答案:

答案 0 :(得分:1)

self.tempoControls 似乎是 PAEControl 对象的数组。名为 dateByAddingTimeInterval:的方法需要一个类型为 NSTimeInterval 的参数( aka double )。看起来你正试图传入这个数组。

尝试更改此行 -

time = [time dateByAddingTimeInterval: self.tempoControls];

也许这个 -

PAEControl* tempoControl = self.tempoControls[self.editIndex];
time = [time dateByAddingTimeInterval: (NSTimeInterval)tempoControl.value];

另一方面,如果这一切都在主线程上运行,请注意您正在阻止它,并且UI将变得非常无响应。