gpt4 book ai didi

ios - 为什么 UISlider 更新 Cocoa-Touch 中的值很慢?

转载 作者:行者123 更新时间:2023-11-29 12:26:45 25 4
gpt4 key购买 nike

我正在为 BLE 使用 Objective-C 和 IOS8 进行开发。

我有两个名为 BLEConnect.mBTServer.m 的文件。 BLEConnect.m中有UILabelUISlider

BLEConnect.m使用BTServer.m获取数据,经过BTServer.m 收到数据,它会将数据发送到BLEConnect.m

操作流程

1.BLEConnect.m 中调用 [self.defaultBTServer readValue:chara];当点击按钮时(SyncLEDState)

2. 当函数readValue被调用时,自动反馈函数didUpdateValueForCharacteristic 会反馈数据。并且它会将数据发送到 BLEConnect.m

中的函数 updateLEDstate

3.BLEConnect.m中的updateLEDstate函数获取来自 BTServer.m 的数据,它会将值更新到 UISlider

BTServer.m 很好地获取数据,并将数据发送到BLEConnect.m

但我在 BLEConnect.mupdateLEDstate 中看到了日志。 NSLog(@"updateLEDstate end!!"); 已经显示,我确信数据是正确的。但是UISlider更新很慢...

偏相关代码如下:

BLEConnect.m

    #import "BLEConnect.h"
#import "BTServer.h"
#import "ProgressHUD.h"
#import <QuartzCore/QuartzCore.h>

@interface BLEConnect () <BTServerDelegate>
@property (strong,nonatomic) BTServer *defaultBTServer;
@end

- (void)viewDidLoad
{
[super viewDidLoad];
self.defaultBTServer = [BTServer defaultBTServer];
self.defaultBTServer.delegate=(id)self;
[self.defaultBTServer initBLEConnect:self];

[self.WhiteSlider setMinimumValue:0];
[self.WhiteSlider setMaximumValue:100];
self.WhiteSlider.value = 100;
}


- (IBAction)SyncLEDState:(id)sender {

for(CBCharacteristic *chara in self.defaultBTServer.discoveredSevice.characteristics){
if ([chara.UUID isEqual:[CBUUID UUIDWithString:LEDStateCharacteristicUUID]]) {

//call the function readValue in BTServer.m
[self.defaultBTServer readValue:chara];
}
}
}

- (void)updateLEDstate:(NSMutableArray*)LEDstate
{
// get the data from BTServer.m , and update the value.
//But it is slow to change the value......
self.RedSlider.value = [[LEDstate objectAtIndex:0] floatValue];
NSLog(@"updateLEDstate end!!");
}

BTServer.h

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
#import "PeriperalInfo.h"
#import "BLEConnect.h"

@class BLEConnect;

+(BTServer*)defaultBTServer;
-(void)initBLEConnect:(BLEConnect *) BLEconnect;

BTServer.m

#import "BTServer.h"
#import "BLEConnect.h"

+(BTServer*)defaultBTServer
{
if (nil == _defaultBTServer) {
_defaultBTServer = [[BTServer alloc]init];
[_defaultBTServer initBLE];
}
return _defaultBTServer;
}

-(void)initBLEConnect:(BLEConnect *)BLEconnect
{ //receive the BLEConnect class object.
self.defaultBLEConnect = BLEconnect;
}

-(void)readValue:(CBCharacteristic*)characteristic
{
[self.selectPeripheral readValueForCharacteristic:self.selectCharacteristic];

/*!!!!When this function been call , the feedback function didUpdateValueForCharacteristic will be call. The data is get by characteristic.value . */
}

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
NSString *LEDstate = [self getHEX:characteristic.value];

//get the data and put into NSMutableArray.
NSMutableArray * LEDstateArray = [[NSMutableArray alloc] initWithObjects:nil];
[LEDstateArray addObject:[NSNumber numberWithInt:LEDstate]];

//send the NSMutableArray to updateLEDstate function in BLEConnect.m
[self.defaultBLEConnect updateLEDstate:LEDstateArray];
}

为什么 UISlider 更新 Objective-c 中的值很慢?

提前致谢。

最佳答案

peripheral:didUpdateValueForCharacteristic: 和相关方法不保证主队列上的回调。但是,您始终必须在主线程上更新 UI。

使用 dispatch_async 在主队列上调度您的 UISlider 代码。

关于ios - 为什么 UISlider 更新 Cocoa-Touch 中的值很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28869395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com