Tôi tương đối mới với hoạt ảnh ios và tôi tin rằng có điều gì đó sai với cách tiếp cận mà tôi đã thực hiện để tạo hoạt ảnh cho UIView.Swift - Hoạt ảnh tô màu đầy màu sắc
Tôi sẽ bắt đầu với một ảnh chụp màn hình giao diện người dùng để hình dung ra vấn đề của tôi chính xác hơn:
Có một tế bào tableView với hai nhãn và vòng tròn đầy màu sắc
Bất cứ lúc nào tôi giới thiệu giá trị mới cho các tế bào, tôi Tôi muốn tạo hiệu ứng cho bóng đèn trái này nhất nên có vẻ như nó có màu đỏ.
này là việc thực hiện od BadgeView, mà về cơ bản là tận cùng bên trái nói trên điền tròn
class BadgeView: UIView {
var coeff:CGFloat = 0.5
override func drawRect(rect: CGRect) {
let topRect:CGRect = CGRectMake(0, 0, rect.size.width, rect.size.height*(1.0 - self.coeff))
UIColor(red: 249.0/255.0, green: 163.0/255.0, blue: 123.0/255.0, alpha: 1.0).setFill()
UIRectFill(topRect)
let bottomRect:CGRect = CGRectMake(0, rect.size.height*(1-coeff), rect.size.width, rect.size.height*coeff)
UIColor(red: 252.0/255.0, green: 95.0/255.0, blue: 95.0/255.0, alpha: 1.0).setFill()
UIRectFill(bottomRect)
self.layer.cornerRadius = self.frame.height/2.0
self.layer.masksToBounds = true
}
}
Đây là cách tôi đạt được lấp đầy không đồng đều - Tôi giới thiệu hệ số mà tôi sửa đổi trong viewController.
Bên trong phương pháp cellForRowAtIndexPath của tôi, tôi cố gắng để animate hình này sử dụng nút tùy chỉnh với callback
let btn:MGSwipeButton = MGSwipeButton(title: "", icon: img, backgroundColor: nil, insets: ins, callback: {
(sender: MGSwipeTableCell!) -> Bool in
print("Convenience callback for swipe buttons!")
UIView.animateWithDuration(4.0, animations:{() -> Void in
cell.pageBadgeView.coeff = 1.0
let frame:CGRect = cell.pageBadgeView.frame
cell.pageBadgeView.drawRect(frame)
})
return true
})
Nhưng nó không làm gì nhưng bản in để an ủi
: CGContextSetFillColorWithColor: 0x0 bối cảnh hợp lệ. Nếu bạn muốn xem backtrace, vui lòng đặt biến môi trường CG_CONTEXT_SHOW_BACKTRACE.
Mặc dù tôi rất muốn biết câu trả lời đúng và cách tiếp cận, nó sẽ là điều tuyệt vời để biết, vì mục đích giáo dục, tại sao mã này không hoạt động. Cảm ơn trước
Điều này thật tuyệt vời, nhưng nó hoạt động như thế nào? Tại sao lần này animateWithDuration thực hiện công việc của mình? Tại sao tôi không thể đặt animateWithDuration vào gọi lại của mình? Tuy nhiên tôi hoàn toàn yêu thích giải pháp này! – DCDC
@DCDC Bạn có thể đặt animateWithDuration vào cuộc gọi lại của mình. Tuy nhiên tôi đã chọn để có trong BadgeView để bất cứ lúc nào bạn sẽ thiết lập một hệ số mới các hình ảnh động là phù hợp về thời gian hoặc tùy chọn. Ngoài ra, bạn có thể kiểm tra [Xem Hướng dẫn lập trình cho iOS] (https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html#//apple_ref/doc/uid/ TP40009503-CH6-SW1) để có cái nhìn chi tiết hơn về cách hoạt ảnh hoạt động và những gì có thể được làm động trong một khối. –
Vâng tôi biết bây giờ. Tôi phải thừa nhận tôi là loại ngạc nhiên như thế nào đơn giản đó. Về cơ bản, tất cả những gì bạn cần làm là chỉ làm thay đổi giá trị của biến coeff và sau đó chỉ cần gọi phương thức có liên quan để vẽ chế độ xem. Big lên người đàn ông cho đến với một giải pháp thực sự đơn giản và mạnh mẽ! – DCDC