এটি একটি সংশোধন করা সম্ভব UIImage'র renderingModeএকটি স্টোরিবোর্ড বা xib এডিটর থেকে?
লক্ষ্যটি tintColorনির্দিষ্ট UIImageViewঅবজেক্টে প্রয়োগ করা ।
এটি একটি সংশোধন করা সম্ভব UIImage'র renderingModeএকটি স্টোরিবোর্ড বা xib এডিটর থেকে?
লক্ষ্যটি tintColorনির্দিষ্ট UIImageViewঅবজেক্টে প্রয়োগ করা ।
উত্তর:
.Xib বা স্টোরিবোর্ড ফাইলগুলিতে আপনি এটি কীভাবে করতে পারেন তা এখানে:
(ওবজে-সি) এখানে একটি বিভাগ তৈরি করুন UIImageView:
@interface UIImageView (Utils)
- (void)setImageRenderingMode:(UIImageRenderingMode)renderMode;
@end
@implementation UIImageView (Utils)
- (void)setImageRenderingMode:(UIImageRenderingMode)renderMode
{
NSAssert(self.image, @"Image must be set before setting rendering mode");
self.image = [self.image imageWithRenderingMode:renderMode];
}
@end
(সুইফ্ট 4) এর জন্য একটি এক্সটেনশন তৈরি করুন UIImageView:
extension UIImageView {
func setImageRenderingMode(_ renderMode: UIImage.RenderingMode) {
assert(image != nil, "Image must be set before setting rendering mode")
// AlwaysOriginal as an example
image = image?.withRenderingMode(.alwaysOriginal)
}
}
তারপরে xib ফাইলের পরিচয় পরিদর্শকটিতে একটি রানটাইম বৈশিষ্ট্য যুক্ত করুন:

আপনি ইমেজ রেন্ডারিং মোডটি .xibফাইলটিতে নয়, একটি .xcassetsলাইব্রেরিতে সেট করতে পারেন ।
কোনও সম্পদ লাইব্রেরিতে কোনও চিত্র যুক্ত করার পরে, চিত্রটি নির্বাচন করুন এবং এক্সকোডের ডানদিকে বৈশিষ্ট্য পরিদর্শকটি খুলুন। 'রেন্ডার অ্যাস' হিসাবে বৈশিষ্ট্যটি সন্ধান করুন এবং এটি 'টেমপ্লেট' এ সেট করুন।
কোনও চিত্রের রেন্ডারিং মোড সেট করার পরে, আপনি চিত্রের রঙ সামঞ্জস্য করতে UIImageViewএকটি .xibবা .storyboardফাইলের মধ্যে একটি রঙিন রঙ যুক্ত করতে পারেন ।
এটি কেবলমাত্র একটি ইন্টারফেস বিল্ডার ফাইলের চেয়ে চিত্রটিতে সম্পত্তি যেখানেই ব্যবহৃত হয় তা সেট করে তবে প্রায় সব ক্ষেত্রেই (যে আমি মুখোমুখি হয়েছি) এটি আপনার পছন্দসই আচরণ।

কয়েকটি বিষয় লক্ষণীয়:
UIImageView। আমি গভীরভাবে এটি তাকান না।UIKitComponentsচিত্র যেমন UIButton's এবং UIBarButtonItemএর।UIImageView, তাই অ্যাপটি চালানোর সময় সবসময় রঙিন রঙটি প্রদর্শিত হয় না।
স্টোরিবোর্ডে বা এক্সআইবিতে ইউআইআইমেজভিউয়ের সাথে টেমপ্লেট রেন্ডারিং মোড ব্যবহার করা আইওএস 7 এবং আইওএস 8 উভয়ই খুব বগিযুক্ত।
ইউআইআইজেজ স্টোরিবোর্ড / এক্সবি থেকে সঠিকভাবে ডিকোড হয় না। আপনি যদি পদ্ধতিটিতে imageView.image.renderingModeসম্পত্তিটি পরিদর্শন করেন তবে আপনি viewDidLoadখেয়াল করবেন যে এটি সর্বদা UIImageRenderingModeAutomatic, এমনকি যদি আপনি এটি আপনার xcassets ফাইলে টেম্পলেট চিত্র হিসাবে রেন্ডার হিসাবে সেট করেন ।
একযোগে কাজ করতে আপনাকে নিজেই রেন্ডারিং মোডটি সেট করতে হবে:
self.imageView.image = [self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
ইউআইআইজেজটি সঠিকভাবে ডিকোড করা হয়েছে এবং এর renderingModeবৈশিষ্ট্যটি প্রতিবিম্বিত করে যা এক্সক্যাসেট ফাইলে বেছে নেওয়া হয়েছিল তবে চিত্রটি রঙিন নয়।
একযোগে কাজ করতে আপনার কাছে দুটি বিকল্প রয়েছে:
tintColor সম্পত্তি সেট করুন ।বা
UIColor *tintColor = self.imageView.tintColor;
self.imageView.tintColor = nil;
self.imageView.tintColor = tintColor;
আপনি আপনার পছন্দসই বিকল্পটি চয়ন করতে পারেন, উভয়ই চিত্রটিকে সঠিকভাবে আঁকুন।
(আপনি যদি এক্সকোড .2.২ নিয়ে সংকলন self.imageView.tintColor = self.imageView.tintColor;করে থাকেন তবে কেবল করা যথেষ্ট হয়েছে তবে আপনি যদি এক্সকোড .3.৩ সহ সংকলন করছেন তবে এটি আর কাজ করে না)
আপনার যদি আইওএস 7 এবং আইওএস 8 উভয়ই সমর্থন করার প্রয়োজন হয় তবে আপনার উভয় কার্যকার্য প্রয়োজন। আপনার যদি কেবল আইওএস 8 সমর্থন করতে হয় তবে কেবলমাত্র একটি কাজের প্রয়োজন।
স্টোরিবোর্ডে রঙিন রঙটি ব্যবহার করতে চিত্রভিউ রেন্ডারিংমড সেট করা ওয়ান-লাইনারে হ্রাস করা যেতে পারে:
[self.imageView setImage:[self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
তারপরে চিত্র এবং রঙিন রঙের সবগুলি স্টোরিবোর্ডে সেট করা যেতে পারে।
আপনি এক্সটেনশন দিয়ে .xib সমস্যাগুলি সমাধান করতে পারেন:
import UIKit
// fixing Bug in XCode
// http://openradar.appspot.com/18448072
extension UIImageView {
override open func awakeFromNib() {
super.awakeFromNib()
self.tintColorDidChange()
}
}
সূত্র: https://gist.github.com/buechner/3b97000a6570a2bfbc99c005cb010bac
আশ্চর্যজনক, এই বাগটি এখন 4-5 বছরের মতো প্রায় হয়েছে।
আপনি সেট সূত্র 't renderingModeপারেন থেকে storyboardবা xib। এটি প্রোগ্রামগতভাবে অ্যাক্সেস করতে পারে।
প্রাক্তন:
UIImage *unSeletedImage = [UIImage imageNamed:@"UnSelected.png"];
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *selectedImage = [unSeletedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
স্টোরিবোর্ডে টিন্ট কালার এবং ক্লাস সেট করুন।
//
// TintColoredImageView.swift
// TintColoredImageView
//
// Created by Dmitry Utmanov on 14/07/16.
// Copyright © 2016 Dmitry Utmanov. All rights reserved.
//
import UIKit
@IBDesignable class TintColoredImageView: UIImageView {
override var image: UIImage? {
didSet {
let _tintColor = self.tintColor
self.tintColor = nil
self.tintColor = _tintColor
}
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override init(image: UIImage?) {
super.init(image: image)
initialize()
}
override init(image: UIImage?, highlightedImage: UIImage?) {
super.init(image: image, highlightedImage: highlightedImage)
initialize()
}
func initialize() {
let _tintColor = self.tintColor
self.tintColor = nil
self.tintColor = _tintColor
}
}
এটি ঠিক করা খুব সহজ
কেবল ক্লাস ইউআইআইমেজভিউপিডিএফ তৈরি করুন এবং এটি আপনার স্টোরিবোর্ডে ব্যবহার করুন
IB_DESIGNABLE
@interface UIImageViewPDF : UIImageView
@end
@implementation UIImageViewPDF
- (void) didMoveToSuperview
{
[super didMoveToSuperview];
self.image = [self.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
id color = self.tintColor;
self.tintColor = color;
}
@end
আরেকটি সমাধান হ'ল একটি UIImageViewসাবক্লাস তৈরি করা :
final class TemplateImageView: UIImageView {
override func awakeFromNib() {
super.awakeFromNib()
guard let oldImage = image else { return }
image = nil
image = oldImage.withRenderingMode(.alwaysTemplate)
}
}
তারপরে কেবল ইন্টারফেস বিল্ডারে ক্লাস সেট করুন TemplateImageView।
স্টোরিবোর্ড থেকে সেট করার সহজ উপায়:
@IBDesignable
public class CustomImageView: UIImageView {
@IBInspectable var alwaysTemplate: Bool = false {
didSet {
if alwaysTemplate {
self.image = self.image?.withRenderingMode(.alwaysTemplate)
} else {
self.image = self.image?.withRenderingMode(.alwaysOriginal)
}
}
}
}
আইওএস 10 এবং সুইফট 3 এ সূক্ষ্মভাবে কাজ করে
আইওএস 9 tintColorএ ইন্টারফেস বিল্ডারে সম্পত্তি সেট করা এখনও বগি।
নোট করুন যে সরাসরি ImageViewবৈশিষ্ট্য সংশোধন করে রেখাগুলি লেখার পাশাপাশি একটি কার্যক্ষম সমাধান হ'ল সম্পদ ক্যাটালগটিতে রেন্ডার হিসাবে: টেম্পলেট চিত্র সেট করা এবং উদাহরণস্বরূপ কল করুন:
[[UIImageView appearanceWhenContainedInInstancesOfClasses:@[[MyView class]]] setTintColor:[UIColor whiteColor]];
যদি আপনি একটি আইবিউটলেট তৈরি করেন তবে আপনি নিজের জাগ্রত থেকে এটি পরিবর্তন করতে পারেন যেমন থেকে ...
self.myImageView.image = [self.myImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
যদিও @ মবির উত্তরটি আরও সঠিক - এটি আরও সংহত হতে পারে।
ক্রেজি এই বাগটি এখনও আইওএস 12.1 এ রয়েছে! স্টোরিবোর্ড / এক্সিবসের জন্য: ইউআইআইমেজভিউতে একটি ট্যাগ যুক্ত করা দ্রুত সমাধান হতে পারে।
সুইফট 4.2
view.viewWithTag(1)?.tintColorDidChange()
extension UIImageView {
@IBInspectable var renderModeTemplate : Bool {
get{
return image?.renderingMode == .alwaysTemplate
}
set{
image = image?.withRenderingMode(newValue ? .alwaysTemplate:.alwaysOriginal)
}
}
}
স্টোরিবোর্ড নির্বাচন UIImageView এবং নির্বাচন পরিদর্শক, সেট সম্পত্তি renderModeTemplate= On
সালে স্টোরিবোর্ড
রুডলফ এছাড়াও উল্লেখ করা হয়েছে উপরে , আমি একটি সহজ বর্গ, ভালো সংজ্ঞায়িত হবে:
import UIKit
@IBDesignable class TintImage: UIImageView{
override func layoutSubviews() {
super.layoutSubviews()
image = image?.withRenderingMode(.alwaysTemplate)
}
}
এই সংজ্ঞার পরে, কেবল স্টোরিবোর্ডে একটি চিত্র ভিউ যুক্ত করুন এবং এর নিজস্ব কাস্টম শ্রেণী নির্বাচন করুন TintImage। এটি স্টোরিবোর্ডে "রঙ" নির্বাচন সক্রিয় করবে।