আইওএস হোয়াইট থেকে স্বচ্ছ গ্রেডিয়েন্ট স্তর গ্রে is


87

আমার কাছে এই ছোট ডিফল্ট ভিউয়ের নীচে একটি ক্যাগ্রাডিয়েন্টলায়ার sertedোকানো হয়েছে যা অ্যাপটির নীচে চলে আসে। আপনি দেখতে পাচ্ছেন, আমি সাদা থেকে রঙগুলি সাফ করার জন্য সেট করেছি, তবে এই অদ্ভুত ধূসর রঙের আভাটি প্রদর্শিত হচ্ছে। কোন ধারনা?

    // Set up detail view frame and gradient
    [self.detailView setFrame:CGRectMake(0, 568, 320, 55)];

    CAGradientLayer *layer = [CAGradientLayer layer];
    layer.frame = self.detailView.bounds;
    layer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
    layer.startPoint = CGPointMake(1.0f, 0.7f);
    layer.endPoint = CGPointMake(1.0f, 0.0f);
    [self.detailView.layer insertSublayer:layer atIndex:0];

সমস্যাযুক্ত ভিউটি এখানে:

সমস্যাযুক্ত ভিউ এখানে


স্তরের নিচে কী আছে?
ট্রোজানফয়ে

মানচিত্রটি। ক্লিয়ার কালার এবং ক্লিয়ার কালার ব্যবহারের জন্য আমি স্তরটি সেট করতে পারি এবং এটি সম্পূর্ণ স্বচ্ছ হবে।
এরিক গাও

আমি যা পেতে চেষ্টা করছি: এই স্তরের নীচে স্তরটি কি ধূসর?
ট্রোজানফয়ে

না ... সূচক 0 তে ইনসার্টসুব্লায়ারটি কি এই স্তরটিকে গভীরতম স্তরে রাখা উচিত নয়? এবং যদি আমি সাবলেয়ারটি sertোকাত না, তবে দৃশ্যটির পটভূমিটি যেমনটি হওয়া উচিত তেমন পরিষ্কার। আমি কেবল গ্রেডিয়েন্টটি সেট করি যখন ধূসর বর্ণটি প্রদর্শিত হয়।
এরিক গাও

আপনি কি এর পরিবর্তে সেল্ফ.ডেটলভিউ.লেয়ার.মাস্কে সেট করার চেষ্টা করেছেন? (স্ব.ডেটাইলভিউ.লেয়ার.মাস্ক = স্তর;)
আকাইনো

উত্তর:


185

ক্লিয়ার কালারের 0 টির একটি আলফা সহ একটি কালো রঙের চ্যানেল রয়েছে, তাই আমাকে ব্যবহার করতে হয়েছিল

[UIColor colorWithWhite:1 alpha:0]

এবং এটা ঠিক কাজ করে।


16
এটি সাদা ছায়ার সাথে কালো ছায়া প্রতিস্থাপন করে। এখনও স্বচ্ছ নয়
RealNmae

4
গুরুত্বপূর্ণ - 2018 এর জন্য, এই পদ্ধতির বিবেচনা করুন: stackoverflow.com/a/25408833/294884
ফ্যাটি

8
@ রিলেনমায় আপনি যদি দুটি রঙ হিসাবে ইউআইকিওলর.স্টার্ট কালার এবং ইউআইসিএলআর.স্টার্ট কলার.উইথ আলফাকম্পোনেন্ট (০.০) পরিষ্কার করতে কোনও রঙ থেকে যেতে চান।
কনর

4
@ কনর এটি প্রকৃতই সঠিক উত্তর - ধন্যবাদ, বর্ণ নির্বিশেষে পুরোপুরি কাজ করে
সোমমামান

60

ইন সুইফট এটি আমার জন্য কাজ করেন,

UIColor.white.withAlphaComponent(0).cgColor

4
উত্তরে প্রদর্শিত হিসাবে .cgColor যুক্ত করতে ভুলবেন না !!! আমি দুর্ঘটনাক্রমে ইউআইসিওলর.হাইট.আল্ফকম্পোনেন্ট (0) ব্যবহার করেছি এবং কেন এটি এখনও ধূসর, তা ভেবে এক ঘন্টার জন্য আমার মাথা আঁচড়ে যাচ্ছিল।
স্নোপিপ্রোটোকল

21

অন্য কোনও রঙ এর মতো কাজ করবে তা উল্লেখ করে মূল্যবান ... উপরের দুটি উত্তরের সংমিশ্রণটি ব্যবহার করে ....

উদ্দেশ্য গ

UIColor *colour = [UIColor redColor];
NSArray *colourArray = @[(id)[colour colorWithAlphaComponent:0.0f].CGColor,(id)colour.CGColor]
NSArray *locations = @[@0.2,@0.8];

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colourArray;
gradientLayer.locations = locations;
gradientLayer.frame = self.frame;

[self.layer addSublayer:gradientLayer];

সুইফট 3

let colour:UIColor = .red
let colours:[CGColor] = [colour.withAlphaComponent(0.0).cgColor,colour.cgColor]
let locations:[NSNumber] = [0.2,0.8]

let gradientLayer = CAGradientLayer()
gradientLayer.colors = colours
gradientLayer.locations = locations
gradientLayer.frame = frame

layer.addSublayer(gradientLayer)


1

উপরের উত্তরগুলি যেমন:

UIColor.white.withAlphaComponent(0).cgColor

এবং

UIColor(white: 1.0, alpha: 0.0).cgColor

আপনার গ্রেডিয়েন্টের একটি অংশ পরিষ্কার হওয়ার ক্ষেত্রে কাজ করা উচিত (বরং ধূসর বর্ণের যেটি ওপি উল্লেখ করছে) than যাইহোক, যদি আপনি এখনও একটি স্বচ্ছ সাদা দেখতে পান যখন আপনি একটি পরিষ্কার রঙ দেখতে পাচ্ছেন, backgroundColorআপনি গ্রেডিয়েন্টটি প্রয়োগ করছেন এমন দৃশ্যের বিষয়টিও স্পষ্ট কিনা তা নিশ্চিত করুন ।

ডিফল্টরূপে, সেই দৃশ্যের পটভূমির রঙটি সম্ভবত সাদা হবে (বা ডিভাইসটি গা dark় মোডে থাকলে একটি গা color় রঙ), সুতরাং যখন আপনি গ্রেডিয়েন্টটি প্রয়োগ করবেন, তখন এর পরিষ্কার অংশটি দর্শকের backgroundColorনিজের দ্বারা "অবরুদ্ধ" হয়ে যাবে। এটি সাফ করার জন্য সেট করুন এবং আপনার যেতে ভাল হওয়া উচিত।


0

অনেকগুলি হিসাবে, আমি একটি পরিষ্কার সাদা ব্যবহার করেও এখনও ধূসর রঙ পেয়েছি।

সুতরাং আমি আমার দৃষ্টিভঙ্গি পরিবর্তন করেছি এবং গ্রেডিয়েন্টের পরিবর্তে একটি মুখোশের জন্য গিয়েছিলাম। শেষ ফলাফলটি একই, ভাল, আরও ভাল, যেহেতু এটি কোনও উপযুক্ত পটভূমি না পেয়ে কেবল এটি নয়, সমস্ত পরিস্থিতিতে কাজ করে।

আমি এই কোডটি আইবি দিয়ে চেষ্টা করে দেখিনি, তবে আশা করি এটিও কার্যকর হয়। শুধু সেট করুন backgroundColorএবং আপনি যেতে ভাল।

@IBDesignable
class FadingView: UIView {

    @IBInspectable var startLocation: Double =   0.05 { didSet { updateLocations() }}
    @IBInspectable var endLocation:   Double =   0.95 { didSet { updateLocations() }}
    @IBInspectable var horizontalMode:  Bool =  false { didSet { updatePoints() }}
    @IBInspectable var diagonalMode:    Bool =  false { didSet { updatePoints() }}
    @IBInspectable var invertMode:      Bool =  false { didSet { updateColors() }}

    private let gradientLayerMask = CAGradientLayer()

    private func updatePoints() {
        if horizontalMode {
            gradientLayerMask.startPoint = diagonalMode ? CGPoint(x: 1, y: 0) : CGPoint(x: 0, y: 0.5)
            gradientLayerMask.endPoint   = diagonalMode ? CGPoint(x: 0, y: 1) : CGPoint(x: 1, y: 0.5)
        } else {
            gradientLayerMask.startPoint = diagonalMode ? CGPoint(x: 0, y: 0) : CGPoint(x: 0.5, y: 0)
            gradientLayerMask.endPoint   = diagonalMode ? CGPoint(x: 1, y: 1) : CGPoint(x: 0.5, y: 1)
        }
    }

    private func updateLocations() {
        gradientLayerMask.locations = [startLocation as NSNumber, endLocation as NSNumber]
    }

    private func updateSize() {
        gradientLayerMask.frame = bounds
    }

    private func updateColors() {
        gradientLayerMask.colors = invertMode ? [UIColor.white.cgColor, UIColor.clear.cgColor] : [UIColor.clear.cgColor, UIColor.white.cgColor]
    }

    private func commonInit() {
        layer.mask = gradientLayerMask
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        updatePoints()
        updateLocations()
        updateSize()
        updateColors()
    }
}

0

আইওএস 13 এ হালকা / গা dark় মোডের উপর ভিত্তি করে সাদা / কালো (বা সত্যই কোনও হালকা / গা dark় উপস্থিতিযুক্ত কোনও রঙ) গ্রেডিয়েন্টগুলি হ্যান্ডেল করার জন্য এটি লক্ষণীয় this

gradientLayer.colors = [
    UIColor.systemBackground.cgColor,
    UIColor.systemBackground.withAlphaComponent(0).cgColor] 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.