2015-03-06 33 views
8

Theo số documentation của Apple, có thể lập trình thiết lập giá trị của UISlider bằng hoạt ảnh mượt mà. Tôi đang cố gắng làm như vậy từ một bộ điều khiển xem tùy chỉnh, giao diện người dùng đang được xác định từ bảng phân cảnh.Tại sao hoạt ảnh UISlider của tôi không hoạt động?

Bối cảnh

Trong ví dụ của tôi, tôi đang cố gắng để cập nhật giá trị thanh trượt từ một bộ điều khiển giao diện tùy chỉnh, giao diện người dùng đã được xác định từ một kịch bản này. Ví dụ chỉ hiển thị một thanh trượt đơn.

Khi người dùng nhả thanh trượt, giá trị được đặt lại thành 0.

Bộ luật

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var mySlider: UISlider! 
    @IBAction func resetSlider() { 
     mySlider.setValue(0, animated:true) 
     NSLog("Reset!") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

} 

resetSlider được liên kết với sự kiện Touch Up Inside.

Vấn đề

Khi resetSlider được gọi là giá trị không thay đổi về giao diện, nhưng nó không sinh động (giá trị đơn giản là "nhảy" tới 0). Mục tiêu của tôi là có giá trị duyên dáng chuyển về 0.

Lưu ý: "Đặt lại!" chỉ hiển thị một lần (mỗi lần nhấp), cho biết rằng resetSlider không được gọi nhiều lần.

Tại sao UISlider này không hoạt ảnh?

Video

Kể từ IB là rất trực quan, here is a video của tình hình, mật khẩu là code

Trả lời

28

tham số setValue animated không thực sự thực hiện một phim hoạt hình, mà đúng hơn là nó phép hoạt hình.

Để kích hoạt các hình ảnh động, bạn cần phải sử dụng UIView.animateWithDuration, và vượt qua trong các lệnh setValue như các hình ảnh động:

UIView.animateWithDuration(0.2, animations: { 
    self.mySlider.setValue(0, animated:true) 
}) 
+0

Ý tưởng tuyệt vời - than ôi, theo NSLog của tôi, nó chỉ được gọi một lần! – slifty

+0

nếu bạn sử dụng khối hình động (xem câu trả lời đã chỉnh sửa) thì sao? đã xảy ra sự cố với hoạt ảnh của thanh trượt trong các phiên bản đầu, không chắc liệu đó có phải là vấn đề hay không. Ngoài ra, nó không cho cả iOS 7 và iOS 8? – f3n1kc

+0

Buồn rằng điều này có một downvote, vì nó thực sự sửa chữa vấn đề. Có vẻ như sử dụng 'setValue: animated:' trong IBAction của thanh trượt không animate, đây có thể là lỗi UIKit. –

0

Các giải pháp của @Slifty là đúng. Nhưng nếu bạn muốn UISlider mượt mà như defauft, vì vậy bạn có thể giảm thời gian hoạt hình xuống dưới 0,2. Nó có thể hoạt động như 0.1/2 hoặc 0.1/3.

Các vấn đề liên quan