我一直在寫一個簡單的華氏/ celcius轉換器風格的應用程序。它可以在模擬器中正常工作,但是當我在iPhone 4上測試應用程序時,它會非常生澀並且在我前後移動滑塊時更新速度很慢。UISlider移動生澀和/或重繪速度慢
我的主視圖控制器看起來像這樣(去掉一些垃圾):
#import "MLViewController.h"
#import "MLGradeModel.h"
#import "MLGrade.h"
@interface MLViewController()
@property (nonatomic, strong) MLGradeModel *gradeModel;
@end
@implementation MLViewController
@synthesize displayLeft = _displayLeft;
@synthesize displayRight = _displayRight;
@synthesize gradeModel = _gradeModel;
@synthesize buttonLeft = _buttonLeft;
@synthesize buttonRight = _buttonRight;
- (IBAction)dragEnter:(UISlider*)sender {
[self sliderUpdate: sender];
}
- (IBAction)sliderInput:(UISlider*)sender {
[self sliderUpdate:sender];
}
- (IBAction) sliderValueChanged:(UISlider *)sender {
[self sliderUpdate:sender];
}
-(IBAction)sliderUpdate:(UISlider*)sender
{
UILabel *myDisplayLeft = self.displayLeft;
UILabel *myDisplayRight = self.displayRight;
float sliderValue = [sender value];
int pos = sliderValue*1000/CONVERSION_SCALE;
NSString *strLeft = [self.gradeModel readGradeFromLeftAtPos:pos];
NSString *strRight = [self.gradeModel readGradeFromRightAtPos:pos];
[myDisplayLeft setText:strLeft];
[myDisplayRight setText:strRight];
// try to redraw, maybe less jerky?
[self.view setNeedsDisplay];
}
-(int) getSliderValue
{
float initialValue = [self.sliderInput value];
return initialValue * 100;
}
- (void)viewDidLoad
{
[super viewDidLoad];
MLGradeModel *model = [MLGradeModel sharedMLGradeModel];
self.GradeModel = model;
}
@end
gradeModel
是NSMutableArrays
的NSMutableArray
,誰包含NSString
值。拖動滑塊時,應讀取數組中的相應位置。然後應將其值設置爲UILabels。
我認爲這應該是最簡單的事情。 UISlider的出口和行動已被拖入故事板。
編輯:此外,當我在手機上運行應用程序時,日誌顯示滑塊輸入已拍攝,但窗口未以更新的速度「如此說」。例如,然後我將滑塊形式從左向右移動,事件顯示在日誌中,但標籤以0.5秒的延遲重新繪製。
編輯:[self.view setNeedsDisplay];
被添加爲測試強制重繪。當該行被註釋掉時,該程序同樣不好/慢。
編輯:
-(IBAction)sliderUpdate:(UISlider*)sender
{
float sliderValue = [sender value];
int pos = sliderValue*10;
NSString *strFromInt = [NSString stringWithFormat:@"%d",pos];
[self.displayLeft setText:strFromInt];
[self.displayRight setText:strFromInt];
}
- 具備我不是迷上了從UISlider的所有事件:當我改變sliderUpdate到它的工作原理同樣不好?我只將valueChanged設置爲我的viewController的sliderInput(它調用sliderUpdate)。
奇怪我在iOS 11中仍然有這個。有人知道它爲什麼會發生? – adev