2013-05-06 24 views
10

Tôi có một hình ảnh trong ứng dụng iPad của mình và về cơ bản tôi muốn đặt một bộ lọc màu lên trên nó. Đối với điều này tôi có một UIView màu được đeo mặt nạ để một hình dạng nhất định mà tôi đặt trên hình ảnh. Vì việc điều chỉnh alpha không mang lại cho tôi hiệu ứng mong muốn, tôi muốn sử dụng chế độ hòa trộn thay thế.Cách lấy chế độ đa pha trên đồng hồ UIView (không phải UIImage)

Theo như tôi biết, bạn chỉ có thể sử dụng chế độ hòa trộn trên hình ảnh chứ không phải chế độ xem đơn giản. Màu của chế độ xem là động nên tôi không thể chỉ sử dụng ảnh thay thế.

Tôi cũng đã thử rasterizing chế độ xem thành hình ảnh, nhưng điều đó có tất cả pixely và odd hoặc một cái gì đó, nhưng có lẽ tôi đã làm điều gì đó sai trái.

Vì vậy, câu hỏi cơ bản là: Có thể áp dụng chế độ hòa trộn cho chế độ xem không? Hay tôi nên thực hiện một cách tiếp cận hoàn toàn khác để đạt được cùng một mục tiêu?

Trả lời

0

Hãy nhìn vào các tài liệu cho compositingFilter CALayer của: https://developer.apple.com/documentation/quartzcore/calayer/1410748-compositingfilter

Mở lớp phủ màu của bạn xem bạn có thể đặt view.layer.compositingFilter đến một CICategoryCompositeOperation để đạt được pha trộn với các nội dung đằng sau nó. Dưới đây là một số mã sân chơi mẫu với chế độ kết hợp đa được áp dụng để kiểm tra nó (thay thế UIImage(named: "") bằng hình ảnh của riêng bạn để thử nghiệm)

import UIKit 
import PlaygroundSupport 

class MyViewController : UIViewController { 
    override func loadView() { 

     let mainView = UIView() 
     self.view = mainView 

     let image = UIImageView() 
     image.translatesAutoresizingMaskIntoConstraints = false; 
     image.image = UIImage(named: "maxresdefault.jpg") 
     mainView.addSubview(image) 

     let overlay = UIView() 
     overlay.translatesAutoresizingMaskIntoConstraints = false; 
     overlay.backgroundColor = .red 
     overlay.layer.compositingFilter = "multiplyBlendMode" 
     mainView.addSubview(overlay) 

     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": view])) 
     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": view])) 

     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": overlay])) 
     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": overlay])) 
    } 
} 

PlaygroundPage.current.liveView = MyViewController() 
Các vấn đề liên quan