1

私は単純な華氏/摂氏変換スタイルのアプリを書いています。シミュレーターでは正常に動作しますが、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 に設定する必要があります。NSMutableArraysNSString

一番シンプルにすべきだと思いました。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を呼び出す)に設定しただけです。

4

1 に答える 1