私は単純な華氏/摂氏変換スタイルのアプリを書いています。シミュレーターでは正常に動作しますが、iPhone 4 でアプリをテストすると、スライダーを前後に動かすと非常にぎくしゃくして更新が遅くなります。
私のメイン ビュー コントローラーは次のようになります (いくつかのがらくたを削除しました)。
#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
値を含むNSMutableArray
のです。スライダーがドラッグされると、配列内の対応する位置が読み取られる必要があります。その値を UILabels に設定する必要があります。NSMutableArrays
NSString
一番シンプルにすべきだと思いました。UISlider のアウトレットとアクションがストーリーボードにドラッグされました。
編集:また、電話でアプリを実行すると、ログにはスライダー入力が取得されたことが示されますが、ウィンドウは「いわゆる」速度で更新されません。たとえば、スライダー フォームを左から右に移動すると、イベントがログに表示されますが、ラベルは 0.5 秒の遅延で再描画されます。
編集:[self.view setNeedsDisplay];
再描画を強制するためのテストとして追加されました。その行がコメントアウトされている場合、プログラムは同様に悪い/遅く動作します。
編集:sliderUpdateを次のように変更すると、同様にうまく機能しません。
-(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 からすべてのイベントを接続していませんか? valueChanged をviewControllerのsliderInput(sliderUpdateを呼び出す)に設定しただけです。