2013-05-06 8 views
10

मेरे पास मेरे आईपैड ऐप में एक छवि है और मैं मूल रूप से इसके ऊपर एक रंग फ़िल्टर रखना चाहता हूं। इसके लिए मेरे पास एक रंगीन UIView है जो कि एक निश्चित आकार के लिए मुखौटा है जिसे मैंने छवि पर रखा है। चूंकि अल्फा को एडजस्ट करना मुझे वांछित प्रभाव नहीं दे रहा है, इसलिए मैं इसके बजाय मिश्रण मोड का उपयोग करना चाहता हूं।एक सादे UIView (UIImage नहीं) पर गुणा मिश्रण मोड कैसे प्राप्त करें

जहाँ तक मुझे पता है कि आप केवल छवियों पर मिश्रण मोड का उपयोग कर सकते हैं और सादे विचार नहीं। दृश्य का रंग गतिशील है इसलिए मैं इसके बजाय एक तस्वीर का उपयोग नहीं कर सकता।

मैंने एक छवि को दृश्य को रास्टराइज़ करने का भी प्रयास किया, लेकिन यह सभी पिक्सेल और अजीब या कुछ मिला, लेकिन शायद मैंने कुछ गलत किया।

तो, मूल प्रश्न यह है: क्या दृश्यों में मिश्रण मोड लागू करना संभव है? या क्या मुझे एक ही लक्ष्य तक पहुंचने के लिए एक पूरी तरह से अलग दृष्टिकोण लेना चाहिए?

उत्तर

0

CALayer के compositingFilter के लिये दस्तावेज पर एक नज़र डालें: https://developer.apple.com/documentation/quartzcore/calayer/1410748-compositingfilter

अपने रंग ओवरले पर आप इसके पीछे सामग्री के साथ सम्मिश्रण प्राप्त करने के लिए एक CICategoryCompositeOperation को view.layer.compositingFilter सेट कर सकते हैं देख सकते हैं। यहां कुछ नमूना खेल का मैदान कोड है जो इसे जांचने के लिए लागू एक मल्टीप्ले मिश्रण मोड के साथ लागू होता है (UIImage(named: "") को परीक्षण के लिए अपनी छवि के साथ बदलें)

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() 
संबंधित मुद्दे