iphone - UIView पारदर्शी ढाल




ios core-graphics (4)

मुझे यह कहने से नफरत है, लेकिन मुझे लगता है कि आप कस्टम UIView भूमि में हैं। मुझे लगता है कि मैं एक कस्टम UIView में इसे लागू करने की कोशिश करूंगा ताकि ड्रॉअर रूटीन को खत्म किया जा सके।

इसके साथ, आपके पास वह दृश्य हो सकता है, जो आपके वास्तविक स्क्रॉलव्यू के शीर्ष पर हो, और आपके ग्रेडिएंट दृश्य (यदि आप चाहें) "सभी स्पर्श घटनाओं (अर्थात पहले उत्तरदाता) को" पास-ऑन "" कर सकते हैं।

IOS पर एक मनमानी UIView को देखते हुए, क्या इसमें "अग्रभूमि-पारदर्शी" ग्रेडिएंट लागू करने के लिए कोर ग्राफिक्स (CAGradientLayer दिमाग में आता है) का उपयोग करने का एक तरीका है?

मैं एक मानक CAGradientLayer का उपयोग नहीं कर सकता क्योंकि पृष्ठभूमि एक UIColor की तुलना में अधिक जटिल है। मैं PNG को ओवरले भी नहीं कर सकता क्योंकि पृष्ठभूमि बदल जाएगी क्योंकि मेरा सबव्यू उसके पैरेंट वर्टिकल स्क्रॉलव्यू (इमेज देखें) के साथ स्क्रॉल किया गया है।

मेरे पास एक गैर-सुरुचिपूर्ण फालबैक है: मेरे यूविवि क्लिप को उसके साक्षात्कारों में शामिल करें और पृष्ठभूमि के एक पूर्व-गाया ढाल को स्थानांतरित करें, क्योंकि पेरेंट स्क्रोलव्यू स्क्रॉल है।


मैंने ऊपर दिए गए (ओपी के) उत्तर का उपयोग किया और एक ही मुद्दे पर भाग गया, जो एक टिप्पणी में उल्लिखित है - जब दृश्य स्क्रॉल करता है, तो जो कुछ भी ऑफस्क्रीन शुरू हुआ वह अब मुखौटा द्वारा पारदर्शी है।

समाधान ढाल की मास्क के रूप में ढाल की परत को जोड़ना था, न कि स्क्रॉल दृश्य का मुखौटा। मेरे मामले में, मैं एक टेक्स्ट दृश्य का उपयोग कर रहा हूं, जो contentView नामक एक दृश्य के अंदर समाहित है।

मैंने startPoint और startPoint बजाय तीसरा रंग और उपयोग किए गए locations को startPoint , ताकि पाठ दृश्य के नीचे आइटम अभी भी दिखाई दे रहे हैं।

let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.contentView!.bounds
gradientLayer.colors = [UIColor.white.cgColor, UIColor.clear.cgColor, UIColor.white.cgColor]

// choose position for gradient, aligned to bottom of text view
let bottomOffset = (self.textView!.frame.size.height + self.textView!.frame.origin.y + 5)/self.contentView!.bounds.size.height
let topOffset = bottomOffset - 0.1
let bottomCoordinate = NSNumber(value: Double(bottomOffset))
let topCoordinate = NSNumber(value: Double(topOffset))
gradientLayer.locations = [topCoordinate, bottomCoordinate, bottomCoordinate]

self.contentView!.layer.mask = gradientLayer

इससे पहले, ऑफ़स्क्रीन शुरू होने वाला पाठ स्थायी रूप से अदृश्य था। मेरे संशोधनों के साथ, स्क्रॉलिंग उम्मीद के मुताबिक काम करती है, और "क्लोज़" बटन मास्क द्वारा कवर नहीं किया जाता है।


यह मैं कैसे करूँगा।

चरण 1 एक कस्टम ग्रेडिएंट व्यू (स्विफ्ट 4) को परिभाषित करें:

import UIKit

class GradientView: UIView {
    override open class var layerClass: AnyClass {
        return CAGradientLayer.classForCoder()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        let gradientLayer = self.layer as! CAGradientLayer
        gradientLayer.colors = [
            UIColor.white.cgColor,
            UIColor.init(white: 1, alpha: 0).cgColor
        ]
        backgroundColor = UIColor.clear
    }
}

चरण 2 - अपने स्टोरीबोर्ड में एक UIView खींचें और ड्रॉप करें और अपनी कस्टम क्लास को GradientView UIView में सेट करें

एक उदाहरण के रूप में, यह है कि उपरोक्त ढाल जैसा दिखता है:

https://github.com/yzhong52/GradientViewDemo


मैं बस एक ही मुद्दे में भाग गया और अपनी कक्षा लिख ​​रहा था। यह गंभीर ओवरकिल की तरह लगता है, लेकिन यह एकमात्र तरीका था जिससे मैं पारदर्शिता के साथ ग्रेडिएंट कर सकता था। आप यहां मेरा राइटअप और कोड उदाहरण देख सकते हैं

यह मूल रूप से एक कस्टम यूआईवीईवाई के लिए आता है जो दो छवियां बनाता है। एक एक ठोस रंग है, दूसरा एक ढाल है जिसका उपयोग छवि मास्क के रूप में किया जाता है। वहां से मैंने परिणामी छवि को uiview.layer.content पर लागू किया।

मुझे आशा है कि यह मदद करता है, जो





cagradientlayer