ইউআইআইমেজভিউতে রঙিন রঙ ব্যবহার করা


118

আমার নিজস্ব সাবক্লাস আছে UIButton। আমি UIImageViewএটিতে যুক্ত করব এবং একটি চিত্র যুক্ত করব। আমি এটি রঙিন রঙের সাথে চিত্রের উপরে আঁকতে চাই তবে এটি কার্যকর হয় না।

এখন পর্যন্ত আমার কাছে রয়েছে:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        self.backgroundColor = [UIColor clearColor];
        self.clipsToBounds = YES;

        self.circleView = [[UIView alloc]init];
        self.circleView.backgroundColor = [UIColor whiteColor];
        self.circleView.layer.borderColor = [[Color getGraySeparatorColor]CGColor];
        self.circleView.layer.borderWidth = 1;
        self.circleView.userInteractionEnabled = NO;
        self.circleView.translatesAutoresizingMaskIntoConstraints = NO;
        [self addSubview:self.circleView];

        self.iconView = [[UIImageView alloc]init];
        [self.iconView setContentMode:UIViewContentModeScaleAspectFit];
        UIImage * image = [UIImage imageNamed:@"more"];
        [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        self.iconView.image = image;
        self.iconView.translatesAutoresizingMaskIntoConstraints = NO;
        [self.circleView addSubview:self.iconView];
        ...

এবং নির্বাচনের উপর:

- (void) setSelected:(BOOL)selected
{
    if (selected) {
        [self.iconView setTintColor:[UIColor redColor]];
        [self.circleView setTintColor:[UIColor redColor]];
    }
    else{
        [self.iconView setTintColor:[UIColor blueColor]];
        [self.circleView setTintColor:[UIColor blueColor]];
    }  
}

আমি কি ভুল করছি? (চিত্রটির রঙ সবসময় একইরকম থাকে যেমন এটি ছিল মূলত।)


আপনি setTintColorযখন আইকনভিউ তৈরি করছেন তখন কি আপনি সক্ষম ?
হিমাংশু জোশী

1
আপনি কি স্ব.আইকনভিউ = [ইউআইআইমেজভিউ বরাদ্দ] এর পরে বোঝাচ্ছেন ...? হ্যাঁ আমি পারি, তবে এটি কার্যকর হয় না।
মার্কো জাদ্রাভেক

তখন সিজি কনটেক্সট ব্যবহার করুন। আপনি এখানে আপনার উত্তর খুঁজে পেতে পারেন stackoverflow.com/a/19275079/1790571
হিমাংশু জোশী

হ্যাঁ আমি এই পোস্টটি দেখছি তবে আমার কোডটি কেন কাজ করে না তা আমি সত্যিই বুঝতে পারি না। রঙিন রঙ ব্যবহার করা অনেক বেশি পরিষ্কার পথ।
মার্কো জাদ্রাভেক

উত্তর:


237

এই কোডের পরিবর্তে:

[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

তোমার উচিত ছিল:

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

এটিকে সুইফট ৪.১ এ ব্যবহার করুন

image = UIImage(named: "name")!.withRenderingMode(.alwaysTemplate)

9
বোকা ভুল নয়, তবে একটি খুব গুরুত্বপূর্ণ বিশদ। এই পোস্ট করার জন্য ধন্যবাদ। আপনি কেবল আমাকে প্রচুর সময় সাশ্রয় করেছেন। (সংশোধন করা টাইপ)
অ্যালেক্স জাভাটোন

47
আপনি সম্পত্তিতে চিত্র নির্বাচন করতে পারেন এবং ডান প্যানেল ডিফল্ট রেন্ডারিং মোডে নির্বাচন করতে পারেন
নিকোলা শুবেনকভ

অসাধারণ! তবে আপনি কীভাবে মূল অ-রঙিন চিত্রটিতে ফিরে যেতে পারেন?
মার্শম্যান

আপনি যদি অ-রঙিন চিত্র পেতে চান আপনি: রঙিন রঙের একটি পৃথক ভেরিয়েবলের মধ্যে সংরক্ষণ করতে পারেন: ইউআইআইমেজ ইমেজ 2 = [চিত্রের চিত্রওয়ালা ....], বা আপনি আবার ফাইল থেকে চিত্র লোড করতে পারেন: চিত্র = [UII छवि চিত্র নামকরণ: @ "আরও" ];
মার্কো জাদ্রাভেক

89

আপনি কেবল আপনার সম্পদে এটি সেট করতে পারেন। আপনার ছবিতে সমস্ত সাদা পিক্সেল + স্বচ্ছ রয়েছে তা নিশ্চিত করুন। এখানে চিত্র বর্ণনা লিখুন


6
আমি এগুলি সব করেছি, তবে কোনও কারণে টিন্টকলার আমার পক্ষে কাজ করে না। কোন ধারণা আমি আর কি চেষ্টা করতে পারি?
কলা

1
আপনি কোন ধরণের চিত্র বিন্যাস ব্যবহার করছেন? এবং চিত্রটি কি সব সাদা + আলফা?
স্ট্যাকউন্ডারফ্লো

3
অদ্ভুতভাবে আমার প্রথম কয়েক রানের উপর কেবল 2/3 চিত্রগুলি রঙিন রঙটি তুলেছে। পরিষ্কার এবং বিল্ড করার পরে সমস্ত চিত্র ছড়িয়ে নেওয়া।
ম্যাথিউএস

আপনি কি অ্যাপলকে রিপোর্ট করতে পারেন?
স্ট্যাকউন্ডারফ্লো 15

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

38

(@ ঝাওলং ঝং পোস্ট সম্পাদনা করতে পারবেন না)

দ্রুত 3.0 এ , আপনি এটি করতে পারেন:

let image = UIImage(named: "your_image_name")!.withRenderingMode(.alwaysTemplate)

yourImageView.image = image

yourImageView.tintColor = UIColor.blue

19

সুইফট ২.০+ তে, আপনি এটি করতে পারেন:

let image = UIImage(named: "your_image_name")!.imageWithRenderingMode(.AlwaysTemplate)

yourImageView.image = image

yourImageView.tintColor = UIColor.blueColor()

11

সুইফ্ট সংস্করণ: 5.2

let tintableImage = UIImage(named: "myImage")?.withRenderingMode(.alwaysTemplate)
imageView.image = tintableImage
imageView.tintColor = UIColor.red

উদ্দেশ্য গ

self.imgView.image = [self.imgView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.imgView setTintColor:[UIColor darkGrayColor]];

অথবা

আপনি কেবল আপনার সম্পদে এটি সেট করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন


7

আরও এক ধাপ. এটি ইউআইআইমেজভিউয়ের একটি ড্রপ-ইন সাবক্লাস। (মূল প্রশ্নের সঠিক সমাধান নয়)) ইন্টারফেস বিল্ডারে টিন্টেড আইমেজভিউতে শ্রেণীর নাম সেট করে ব্যবহার করুন। রঙিন রঙের পরিবর্তন হিসাবে ডিজাইনারের অভ্যন্তরে রিয়েল-টাইমে আপডেট।

(সুইফট ৩.১, এক্সকোড ৮.৩)

import UIKit

@IBDesignable class TintedImageView: UIImageView {
    override func prepareForInterfaceBuilder() {
        self.configure()
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        self.configure()
    }

    @IBInspectable override var tintColor: UIColor! {
        didSet {
            self.configure()
        }
    }

    private func configure() {
        self.image = self.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
    }
}

2
কাজ করছে না, কিন্তু এর কাছে func কনফিগার সংশোধন: self.image = self.image .withRenderingMode (UIImageRenderingMode.alwaysTemplate) দিন রঙ = super.tintColor super.tintColor = UIColor.clear super.tintColor = রং?
lolo_house

5

চিত্রটি দেখুন

    let imageView = UIImageView(frame: frame!)
    imageView.contentMode = .ScaleAspectFit
    imageView.tintColor = tintColor

ছবিটি তৈরি করুন

    let mainBundle = NSBundle.mainBundle()
    var image = UIImage(named: filename!, inBundle: mainBundle, compatibleWithTraitCollection: nil)
    image = image?.imageWithRenderingMode(.AlwaysTemplate)

তাদের একসাথে তারের

    imageView?.image = image

এটি প্রদর্শন করুন

view.addSubview(imageView)

1

সব ঠিক আছে। আমার অবদান যদি আপনি / প্রতিটি ইউআইজিএভিউ ভিউতে আবেদন করতে না পারেন, বা দক্ষতার জন্য আপনাকে ওয়ানসই রেন্ডার করতে হবে (বা টেবিলভিউগুলির সেলগুলির জন্য উদাহরণ)

func tint(with color: UIColor) -> UIImage {
        var image = withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        color.set()

        image.draw(in: CGRect(origin: .zero, size: size))
        image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }

এবং সমস্ত ইউআই উপাদানগুলিকে এই ইউআইআইমেজ সেট করে।


1

@odemolliens উত্তর কেবল কাজ করা উচিত।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.