2013-09-24 74 views
14

Tôi có một ứng dụng chạy hoàn hảo trên iOS 6. Tôi đã thiết lập một hiệu ứng nhấp nháy để ngón tay cái của UISlider theo cách này:UISlider thumbTintColor không thay đổi trên iOS 7 (tốt trên iOS 6)

-(void)startBlinkingSlider{ 
    isSliderBlinking = YES; 
    isSliderTinted = NO; 
    [self performSelector:@selector(toggleSliderColor) withObject:nil afterDelay:0.2]; 
} 

-(void)toggleSliderColor{ 
    if(isSliderBlinking){ 
     if(isSliderTinted){ 
      self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 
     }else{ 
      self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:255 green:0 blue:0 alpha:1]; 
     } 
     isSliderTinted = !isSliderTinted; 
     [self performSelector:@selector(toggleSliderColor) withObject:nil afterDelay:0.2]; 
    } 
} 

-(void)stopBlinkingSlider{ 
    isSliderBlinking = NO; 
    isSliderTinted = NO; 
    self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 
} 

Khi tôi gọi startBlinkingSlider thanh trượt của tôi bắt đầu nhấp nháy màu đỏ trong iOS 6. Nếu tôi chạy cùng một ứng dụng chính xác trên thiết bị iOS 7 của mình thì sẽ không có gì xảy ra. Ngón tay cái của thanh trượt giữ lại màu trắng ban đầu của nó. Tôi đã đặt một điểm ngắt trên dòng nơi tôi đặt thumbTintColor. Trong trình gỡ lỗi, dưới đây là những gì tôi nhận được:

(lldb) po self.effectAmountSlider.thumbTintColor 
error: failed to get API lock 
(lldb) po self.effectAmountSlider.thumbTintColor 
UIDeviceRGBColorSpace 0 0 0 1 
(lldb) 

Tôi đã nhập chính mã tương tự và nhận được thư lạ trong thư đầu tiên. Tuy nhiên, kết quả thứ hai là chính xác. Sau đó, sau khi cài đặt thành màu đỏ, tôi cũng nhận được kết quả chính xác:

(lldb) po self.effectAmountSlider.thumbTintColor 
UIDeviceRGBColorSpace 1 0 0 1 

Mặc dù trình gỡ lỗi hiển thị đúng giá trị, tôi không nhận được thay đổi trực quan trên thanh trượt. Nó vẫn còn màu trắng, màu sắc không thay đổi theo bất kỳ cách nào. Tôi đã tìm kiếm các tài liệu của Apple tại đây: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Controls.html

Nó không nói gì về thumbTintColor của UISlider không hoạt động như iOS 6. Nó sẽ vẫn hoạt động như mong đợi. Tôi đã kiểm tra chuỗi và mọi thứ đang chạy trên chuỗi chính. toggleSliderColor luôn luôn là chủ đề chính vì vậy nó không phải là một vấn đề luồng. Tại sao ngón tay cái của tôi không hoạt động?

Cảm ơn, có thể.

+1

Điều này giống như một lỗi đối với tôi. Tôi chỉ cố gắng thiết lập màu sắc cho một UISlider khi tôi tạo ra nó, đơn giản hơn nhiều so với những gì bạn đang làm với nhấp nháy, nhưng nó vẫn tiếp tục trắng khi tôi chạy nó. Tôi sẽ háo hức được nghe nếu đây là lỗi được xác nhận hoặc nếu chúng tôi đang làm điều gì sai. – GeneralMike

+0

@GeneralMike nếu bạn đã nhập một lỗi, hãy đăng nó, xem câu trả lời của tôi bên dưới, chúng tôi nhận được của chúng tôi dupped của bạn. –

+0

@DavidH: Tôi chưa gửi báo cáo lỗi, tôi chỉ đang suy đoán rằng đó là lỗi.Thông tin từ 'Hướng dẫn chuyển đổi giao diện người dùng iOS 7 'mà bạn tham chiếu trong câu trả lời của bạn dường như gợi ý có điều gì đó đang xảy ra ở đây. Tôi đã tạm thời được chuyển đến một dự án khác, nhưng khi tôi quay lại điều này, tôi sẽ gửi một báo cáo lỗi và đánh lừa bạn. – GeneralMike

Trả lời

10

Trên cơ sở câu trả lời của @ aaronsti, tôi thấy rằng những điều sau đây hiệu quả với tôi. Đặt hình thu nhỏ thành nil không có hiệu lực.

[_slider setThumbImage:[_slider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal]; 
_slider.minimumTrackTintColor = minTintColor; 
_slider.thumbTintColor = thumbTintColor; 
+2

Dòng đầu tiên thay đổi một cái gì đó, nhưng thay vì nhận đúng 'UIColor' trên' thumbImage' tôi có một màu với một gradient và mỗi khi tôi di chuyển 'UISlider' nó sẽ thay đổi thành màu chính xác cho đến khi tôi không chọn nó .. –

11

Tôi chỉ tình cờ đọc lại số iOS 7 UI Transition Guide sáng nay và được chuyển sang tuyên bố dưới Slider. Nếu EITHER maximumTrackTineColor HOẶC thumbTintColor là 0, thì cả hai thuộc tính đều bị bỏ qua. Vì vậy, tôi đã cố gắng để thiết lập tất cả các màu sắc, ngón tay cái vẫn còn màu trắng.

Tôi đã nhập một báo cáo lỗi về điều này - # 15277127 - tham khảo nó nếu bạn nhập lỗi của riêng bạn. Càng có nhiều báo cáo thì càng có nhiều khả năng Apple sẽ sửa chữa nó sớm.

CHỈNH SỬA: Apple đã lừa đảo lỗi của tôi cho một lỗi khác - điều này rõ ràng đã được biết từ trước.

+0

vâng, điều này thực sự dường như là một lỗi. Tôi cũng đã nhập một báo cáo lỗi. (Tôi không thể nhìn thấy bất kỳ lỗi nào khác ngoài tôi mặc dù trong báo cáo lỗi, vì vậy tôi không biết làm thế nào để tham khảo) –

+0

@ canpoyrazoğlu đăng số lỗi của bạn, tôi sẽ dup mỏ của bạn –

+0

15199234. nhưng làm thế nào để bạn nhìn thấy lỗi của người khác? –

19

Tôi đã phát hiện ra một giải pháp thay thế. Trước tiên, hãy gọi phương thức 'setThumbImage: forState:', thuộc tính 'thumbTintColor' sẽ có hiệu lực.

[self.slider setThumbImage:[UIImage imageNamed:@"Thumb.png"] 
        forState:UIControlStateNormal]; 
self.slider.thumbTintColor = [UIColor blackColor]; 

Tôi đã thử nghiệm điều này trên Phiên bản 7.0 (463.9.4.2) của Trình mô phỏng iOS.

+0

Hiện tại tôi không thể kiểm tra nó (dự án hiện đang ở trạng thái không thể kết nối) nhưng có cần Thumb.png để làm tài sản trong dự án của tôi hay không mặc định nó nếu không được chỉ định? –

+0

Có, Thumb.png phải được thêm vào Images.xcassets. Nếu không tìm thấy Thumb.png trong nội dung, nó sẽ biên dịch, nhưng cách giải quyết sẽ không hoạt động và ngón tay cái của thanh trượt sẽ vẫn hiển thị màu trắng. Không cần đặt tên là Thumb.png nhưng bất kỳ tên hình ảnh nào bạn muốn. – aaronsti

2

Cho đến nay trong Xcode 6.2, iOS 8.2 sự cố vẫn còn đó và cách giải quyết vẫn hoạt động. Phiên bản Swift:

slider.setThumbImage(slider.thumbImageForState(.Normal), forState:.Normal)