2013-10-01 37 views
1

我一直在寫一個簡單的華氏/ 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 

gradeModelNSMutableArraysNSMutableArray,誰包含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)。

+0

奇怪我在iOS 11中仍然有這個。有人知道它爲什麼會發生? – adev

回答

1

我有UISlider此相同的延遲問題上iPhone 4採用我的應用我現在已經開始針對iOS的7

在iOS 6上我滑塊工作完全在iPhone 4

同一應用程序的作品順利在4S和iPad的迷你,我這裏有

編輯

什麼我剛剛發現的是,在我的應用程序出現在iPhone 4上的UISlider性能很大的區別的iOS 7下,當我爲調試和構建發佈。

我有一堆日誌在滑塊中進行 - 使用DLog代替NSLog - DLog是一個擴展到NSlog的宏,在調試模式下運行並且在發佈模式下不運行。所以看來伐木造成了滯後。

檢查是否有日誌記錄在那裏進行註釋或者如果您正在使用Dlog,請嘗試更改方案以發佈並查看是否解決了您的問題並查看是否有所幫助,

要更改爲釋放外觀的Xcode菜單產品方案編輯方案)

對我的世界有所不同。

一點浮雕!

+0

我沒有任何日誌。它仍然很慢。 – adev