UISlider setValue不起作用

时间:2014-09-23 16:14:29

标签: xcode multithreading ipad slider setvalue

我整个下午一直试图在滑块上正确设置一个值。这让我发疯了。

首先,这部分代码正在运行。我从webSocket(socketRocket库)收到一条消息,我转换为float并将滑块设置到适当的位置

- (void) webSocket:(SRWebSocket *) webSocket didReceiveMessage:(id)message{
        float stateValue = [message floatValue];
        zoneSlider.value = stateValue;
        zoneSlider.alpha = 1;
    }

因此,此代码正确设置了滑块的值(zoneSlider)并使其可见,正如我所需要的那样。

但是对于第一次打开视图,我还需要以编程方式将滑块设置为默认值(出于某些原因,直接在storyboard属性检查器中设置它不适合我的需要)。

我写了这段代码:

float defaultValue = 30.0f;
[zoneSlider setValue:defaultValue animated:NO];
zoneSlider.alpha = 1;

它将滑块设置为零(左上角)。我尝试过多个解决方案(使用zoneSlider.value = defaultValue等,从NSString中复制一个以复制使用webSocket消息的内容)。

我做错了吗?

谢谢!

PS:当webSocket(方法didReceiveMessage)收到消息时,将使用两个滑块setValue(工作和非工作)。然而,对于不工作的消息,消息被发送到dispatch_async方法中的套接字(我绝对不熟悉...)。虽然我没有看到任何理由,但可能会成为麻烦的来源。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    while (viewActive == true){
        // Pause between refresh
        NSDate *future = [NSDate dateWithTimeIntervalSinceNow: 5 ];
        [NSThread sleepUntilDate:future];

        //Code in this part is run on a background thread
        [self sendGetState]; //Then a message is sent and we go to the setValue
    }
});

2 个答案:

答案 0 :(得分:1)

您是否尝试过更改最大值和最小值?

答案 1 :(得分:0)

我发现了我的问题!我在一个相当长而复杂的系列中犯了一个错误,如果"试验。一个应该是"否则如果"。

新手的错误,我将来的缩进会更加严谨......