iOS 장치에 연결된 외부 장치의 전압을 읽는 여러 개의 UIProgressView
이 있습니다. 이 뷰는 0-5V의 범위에서 크기를 조정하고 UIProgressView
의 현재 진행/전압을 검색하여 사용자가 입력 한 임계 값과 비교하는 방법이 있는지 알고 싶습니다. 일단이 임계 값이 초과되면; 필자가 작성한 방법을 호출해야합니다.UIProgressView에서 현재 값 가져 오기 및 임계 값 충족시 이벤트 트리거
문제가 반드시 비교 부분이나 메서드를 호출하는 것은 아닙니다. progressview의 현재 값이 무엇인지 라이브 업데이트를 검색하는 데 문제가 있습니다.
감사합니다. PART II에 대한
편집 :
그래서 문제가 내가이 코딩하지 않았다되고는 특정 제품에 관련된 코드는 Nanospark 보드를했다. 이 보드는 다양한 iOS 장치에서 실행되는 공장 시스템 용 입출력 제어 보드입니다.
나는 확실히 이전 코더이 클래스 내에서 무슨 짓을했는지 알아낼 수 없습니다
//
// AnalogVC.m
// NanosparkController
//
#import "AnalogVC.h"
#import "AppDelegate.h"
@interface InputItem : NSObject
@property (weak,nonatomic) UISwitch *onSwitch;
@property (weak,nonatomic) UIProgressView *progressView;
@property (weak,nonatomic) UILabel *valueLabel;
@end
@implementation InputItem
AppDelegate *appDelegate;
+ (id)itemWithSwitch:(id)temp progress:(id)progress label:(id)label
{
InputItem *item = [[InputItem alloc] init];
item.onSwitch = temp;
item.progressView = progress;
item.valueLabel = label;
return item;
}
- (void)setDisconnected
{
self.onSwitch.on = NO;
self.onSwitch.enabled = NO;
self.valueLabel.text = @"0.000 v";
self.progressView.progress = 0;
}
- (void)setOn
{
self.onSwitch.on = YES;
self.onSwitch.enabled = YES;
self.valueLabel.text = @"0.000 v";
self.progressView.progress = 0;
[appDelegate watchPins:@"testing ON"];
}
- (void)setOff
{
self.onSwitch.on = NO;
self.onSwitch.enabled = YES;
self.valueLabel.text = @"0.000 v";
self.progressView.progress = 0;
[appDelegate watchPins:@"testing OFF"];
}
- (void)setValue:(double)value
{
if (self.onSwitch.on)
{
self.valueLabel.text = [NSString stringWithFormat:@"%0.3f v",value];
self.progressView.progress = value/5.0;
if(value > 0.8){
[appDelegate watchPins:@"testing VALUE"];
}
}
}
@end
@interface AnalogVC()
{
NSArray *_inputItems;
AppDelegate *appDelegate;
NSMutableArray *channel0Values;
UIColor *custom1;
UIColor *custom2;
UIColor *custom3;
UIColor *custom4;
}
@property (nonatomic) NCBoardManager *manager;
@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch0;
@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch1;
@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch2;
@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch3;
@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch4;
@property (weak,nonatomic) IBOutlet UISwitch *inputSwitch5;
@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress0;
@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress1;
@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress2;
@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress3;
@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress4;
@property (weak,nonatomic) IBOutlet UIProgressView *inputProgress5;
@property (weak,nonatomic) IBOutlet UILabel *inputValue0;
@property (weak,nonatomic) IBOutlet UILabel *inputValue1;
@property (weak,nonatomic) IBOutlet UILabel *inputValue2;
@property (weak,nonatomic) IBOutlet UILabel *inputValue3;
@property (weak,nonatomic) IBOutlet UILabel *inputValue4;
@property (weak,nonatomic) IBOutlet UILabel *inputValue5;
@property (weak,nonatomic) IBOutlet UISlider *outputSlider0;
@property (weak,nonatomic) IBOutlet UISlider *outputSlider1;
@property (weak,nonatomic) IBOutlet UIStepper *outputStepper0;
@property (weak,nonatomic) IBOutlet UIStepper *outputStepper1;
@property (weak,nonatomic) IBOutlet UILabel *outputValue0;
@property (weak,nonatomic) IBOutlet UILabel *outputValue1;
- (IBAction)inputChannelChanged:(UISwitch *)sender;
- (IBAction)outputSliderMoved:(UISlider *)sender;
- (IBAction)outputSliderStopped:(UISlider *)sender;
- (IBAction)outputStepperChanged:(UIStepper *)sender;
@end
@implementation AnalogVC{}
//////////////////////////////
#pragma mark View Lifecycle
//////////////////////////////
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Analog VC loaded");
_inputItems = @[[InputItem itemWithSwitch:_inputSwitch0 progress:_inputProgress0 label:_inputValue0],
[InputItem itemWithSwitch:_inputSwitch1 progress:_inputProgress1 label:_inputValue1],
[InputItem itemWithSwitch:_inputSwitch2 progress:_inputProgress2 label:_inputValue2],
[InputItem itemWithSwitch:_inputSwitch3 progress:_inputProgress3 label:_inputValue3],
[InputItem itemWithSwitch:_inputSwitch4 progress:_inputProgress4 label:_inputValue4],
[InputItem itemWithSwitch:_inputSwitch5 progress:_inputProgress5 label:_inputValue5]];
_manager = [NCBoardManager sharedBoardManager];
__unsafe_unretained AnalogVC *vc = self;
[_manager setAnalogInputHandling:dispatch_get_main_queue()
filter:^(NCAnalogInputs *inputs){ return YES; }
handler:^(NCAnalogInputs *inputs){ [vc setAnalogInputs:inputs]; }];
// Register for notifications
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(boardConnected:)
name:CONNECTED_NOTIFICATION
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(boardDisconnected:)
name:DISCONNECTED_NOTIFICATION
object:nil];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self updateAnalogInputs];
[self updateAnalogOutputs];
custom1 = [UIColor whiteColor];
custom2 = [UIColor darkGrayColor];
custom3 = [UIColor blackColor];
custom4 = [UIColor colorWithRed:.97 green:.97 blue:.588 alpha:1.0];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[custom2 CGColor], (id)[custom1 CGColor], (id)[custom2 CGColor], nil];
gradient.startPoint = CGPointMake(0.5, 0);
gradient.endPoint = CGPointMake(0.5, 1.0);
gradient.locations = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:1.0], nil];
[self.view.layer insertSublayer:gradient atIndex:0];
[self.inputSwitch0 setOnTintColor:custom4];
[self.inputSwitch1 setOnTintColor:custom4];
[self.inputSwitch2 setOnTintColor:custom4];
[self.inputSwitch3 setOnTintColor:custom4];
[self.inputSwitch4 setOnTintColor:custom4];
[self.inputSwitch5 setOnTintColor:custom4];
[self.inputSwitch0 setTintColor:custom3];
[self.inputSwitch1 setTintColor:custom3];
[self.inputSwitch2 setTintColor:custom3];
[self.inputSwitch3 setTintColor:custom3];
[self.inputSwitch4 setTintColor:custom3];
[self.inputSwitch5 setTintColor:custom3];
self.inputProgress0.trackTintColor = custom3;
self.inputProgress1.trackTintColor = custom3;
self.inputProgress2.trackTintColor = custom3;
self.inputProgress3.trackTintColor = custom3;
self.inputProgress4.trackTintColor = custom3;
self.inputProgress5.trackTintColor = custom3;
self.inputProgress0.progressTintColor = custom4;
self.inputProgress1.progressTintColor = custom4;
self.inputProgress2.progressTintColor = custom4;
self.inputProgress3.progressTintColor = custom4;
self.inputProgress4.progressTintColor = custom4;
self.inputProgress5.progressTintColor = custom4;
self.outputSlider0.minimumTrackTintColor = custom4;
self.outputSlider1.minimumTrackTintColor = custom4;
self.outputSlider0.maximumTrackTintColor = custom3;
self.outputSlider1.maximumTrackTintColor = custom3;
self.outputSlider0.thumbTintColor = custom3;
self.outputSlider1.thumbTintColor = custom3;
if(_manager.isBoardConnected)
{
self.outputStepper0.tintColor = custom4;
self.outputStepper1.tintColor = custom4;
self.outputStepper0.enabled = TRUE;
self.outputStepper1.enabled = TRUE;
self.outputSlider0.enabled = TRUE;
self.outputSlider1.enabled = TRUE;
}
else
{
self.outputStepper0.tintColor = custom2;
self.outputStepper1.tintColor = custom2;
self.outputStepper0.enabled = FALSE;
self.outputStepper1.enabled = FALSE;
self.outputSlider0.enabled = FALSE;
self.outputSlider1.enabled = FALSE;
}
}
//////////////////////////////
#pragma mark Rotation Calls
//////////////////////////////
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationPortrait;
}
- (BOOL)shouldAutorotate
{
return FALSE;
}
//////////////////////////
#pragma mark Board Calls
//////////////////////////
- (void)boardConnected:(NSNotification *)notification
{
[self updateAnalogInputs];
[self updateAnalogOutputs];
self.outputStepper0.enabled = TRUE;
self.outputStepper1.enabled = TRUE;
self.outputSlider0.enabled = TRUE;
self.outputSlider1.enabled = TRUE;
self.outputStepper0.tintColor = custom4;
self.outputStepper1.tintColor = custom4;
}
- (void)boardDisconnected:(NSNotification *)notification
{
[self updateAnalogInputs];
[self updateAnalogOutputs];
self.outputStepper0.enabled = FALSE;
self.outputStepper1.enabled = FALSE;
self.outputSlider0.enabled = FALSE;
self.outputSlider1.enabled = FALSE;
self.outputStepper0.tintColor = custom2;
self.outputStepper1.tintColor = custom2;
}
- (void)updateAnalogInputs
{
uint8_t channel = self.manager.analogInputChannels;
switch (self.manager.analogInputStatus)
{
case NCInputConnected:
// Check if channels we left on
if (channel) self.manager.analogInputChannels = 0;
[_inputItems makeObjectsPerformSelector:@selector(setOff)];
break;
case NCInputDisconnected:
[_inputItems makeObjectsPerformSelector:@selector(setDisconnected)];
break;
case NCInputLiveUpdating:
for (InputItem *item in _inputItems)
{
//if (channel & 1) [item setOn];
//else [item setOff];
channel >>= 1;
}
break;
case NCInputSampling:
[_inputItems makeObjectsPerformSelector:@selector(setDisconnected)];
break;
case NCInputTransfering:
[_inputItems makeObjectsPerformSelector:@selector(setDisconnected)];
break;
}
}
- (void)setAnalogInputs:(NCAnalogInputs *)inputs
{
int i = 0;
uint8_t channels = inputs.channels;
for (InputItem *item in _inputItems)
{
if (channels & 1)
{
[item setValue:[inputs valueForChannel:i]];
}
channels >>= 1;
i++;
}
}
- (void)updateAnalogOutputs
{
BOOL connected = [self.manager isBoardConnected];
self.outputSlider0.value = self.manager.analogOutput0;
self.outputSlider0.enabled = connected;
self.outputStepper0.value = self.outputSlider0.value * 1000;
self.outputStepper0.enabled = connected;
self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",self.outputSlider0.value];
self.outputSlider1.value = self.manager.analogOutput1;
self.outputSlider1.enabled = connected;
self.outputStepper1.value = self.outputSlider1.value * 1000;
self.outputStepper1.enabled = connected;
self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",self.outputSlider1.value];
}
///////////////////////////////
#pragma mark IBAction Methods
///////////////////////////////
- (IBAction)inputChannelChanged:(UISwitch *)sender
{
NSLog(@"TEST");
InputItem *item = [_inputItems objectAtIndex:sender.tag];
uint8_t channels = self.manager.analogInputChannels;
if (sender.on)
{
channels |= (1 << sender.tag);
[item setOn];
}
else
{
channels &= ~(1 << sender.tag);
[item setOff];
}
if (!self.manager.analogInputChannels) [self.manager startAnalogLiveUpdating];
else if(!channels) [self.manager stopAnalogLiveUpdating];
self.manager.analogInputChannels = channels;
}
- (IBAction)outputSliderMoved:(UISlider *)sender
{
if (!sender.tag)
{
self.manager.analogOutput0 = sender.value;
self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",sender.value];
}
else
{
self.manager.analogOutput1 = sender.value;
self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",sender.value];
}
}
- (IBAction)outputSliderStopped:(UISlider *)sender
{
if (!sender.tag)
{
self.manager.analogOutput0 = sender.value;
self.outputStepper0.value = round(sender.value * 1000.0);
self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",self.outputStepper0.value/1000.0];
}
else
{
self.manager.analogOutput1 = sender.value;
self.outputStepper1.value = round(sender.value * 1000.0);
self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",self.outputStepper1.value/1000.0];
}
}
- (IBAction)outputStepperChanged:(UIStepper *)sender
{
float value = sender.value/1000.0;
if (!sender.tag)
{
self.manager.analogOutput0 = value;
self.outputSlider0.value = value;
self.outputValue0.text = [NSString stringWithFormat:@"%0.3f v",value];
}
else
{
self.manager.analogOutput1 = sender.value/1000.0;
self.outputSlider1.value = value;
self.outputValue1.text = [NSString stringWithFormat:@"%0.3f v",value];
}
}
@end
오전 데 문제가 I가와에있는 UIProgressViews에서 값을하는 방법을 알아낼 수 없습니다 스토리 보드 (이것은 당신이 말한 것처럼 사소한 개념입니다). 그러나이 설정을 사용하면 다소 복잡합니다.
두 번째 문제점은 다음과 같습니다. 외부 장치 (nanospark 컨트롤러 보드)가 iPod에 연결되어있을 때만 응용 프로그램으로 디버깅 할 수있는 방법이 있는지 잘 모르겠습니다. 이 실행됩니다.
내가 마지막으로하는 마지막 문제는 IBAction InputChannelChanged가 호출되고 있다고 가정합니다 (응용 프로그램을 실행하기 위해 외부 장치가 필요하기 때문에 앞에서 설명한 중단 점을 사용하여이 디버그를 정기적으로 디버깅 할 수는 없습니다). 그러나 실행할 때 응용 프로그램은 필요한 모든 작업을 수행하며 버튼은 원래 소프트웨어 개발자가 코딩 한 것과 정확하게 반응합니다.
즉, [appDelegate watchPins @ "TEST"]를 추가하여 IBAction에 문자 메시지 메서드를 추가하면 텍스트를 사용자에게 보내지 않지만 단추는 여전히 수행해야 할 작업을 수행한다는 것을 의미합니다 이전 개발자의 열망과 일치합니다 .... 이것은 IBAction 메서드가 실제로 호출되고 있음을 의미하지만 그 다음 내 텍스트가 통과되지 않는 이유는 무엇입니까? 나는 그것을 알고있다 [appDelegate watchPins : @ "TEST"]; 다른 여러 수업에서 내가 사용한대로 작동해야합니다. 여기
는 AnalogVC.m의 UI를 표시하는 스크린 샷입니다 :http://i.stack.imgur.com/NNpZk.png
생각하지 마세요 그냥 내가 필요한 더 큰 문맥 세 가지를 모두 제공에 느낀이 모든 질문에 대답 할 의무가 문제의 TL에 감사 드리며 죄송합니다. DR.
편집 2 : 이미지를 업로드 하겠지만 필요한 최소한의 평판은 없습니다.
EDIT 3 : 버튼에 반응하는지 다른 IBAction을 추가하려고했습니다. 다른 작업 클래스의 정확한 코드를 복사하더라도 여전히 아무것도 없습니다.
감사합니다 훌륭한 자원을 위해!, 훌륭한 도움. – Tukajo
@ Tukajo : 문제 없습니다. 도와 드리겠습니다. – 68cherries
@ 67cheries 코드를 게시 할 때 문제를 해결할 수있는 순간이 있습니까? 나는 네가 말한 것을 시도했지만 아무 소용이 없다. – Tukajo