আমি কীভাবে প্রোগ্রামটিমে আইওএস 7 ডিফল্ট নীল রঙ পেতে পারি?


223

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

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

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

আমার প্রশ্নটি এখানে: এই রঙের জন্য একটি সাধারণ অ্যাকসেসর বিদ্যমান? [UIColor ?]নাকি এরকম কিছু? যদি তা না হয় তবে কেউ কি সেই রঙের জন্য সঠিক আরজিবি মান জানতে পারে ?

উত্তর:


252

self.view.tintColorএকটি ভিউ কন্ট্রোলার, বা self.tintColorএকটি UIViewসাবক্লাস থেকে ব্যবহার করুন ।


6
আমি বলতে যাচ্ছিলাম যে আপনি কেবল ব্যবহার করতে পারেন UIView().tintColor, তবে বাস্তবে আপনি পারবেন না।
ইউআইভিউয়ের বিন্দুতে

1
@ ড্যানরোসেনস্টার্ক আমি মনে করি UIWindowবা এর মূল দৃশ্যের মূল সংস্করণ রয়েছে। প্রতিক্রিয়াশীল শৃঙ্খলায় উচ্চ দর্শন থেকে দর্শনগুলি তাদের রঙিন রঙের উত্তরাধিকারী, তবে আপনার উদাহরণে নতুন দর্শনটির কোনও তদারকি নেই।
অ্যারন ব্র্যাজার 5

2
self.view.tintColorভিতরে থেকে UIViewController.viewDidLoad()সঠিক নীল দেয়।
নিকোলাস মিয়ারি

234

এটি প্রদর্শিত হয় [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]

রঙ উইন্ডো দেখাচ্ছে স্ক্রিনশট


2
মজার বিষয় হল, আমার সিস্টেমে ডিফল্ট নীলটি 0: 128: 255 (একই সরঞ্জাম ব্যবহার করে) বলে মনে হচ্ছে। আমি ভাবছি আপেল কি সম্প্রতি এটি বদলেছে?
জোয়েল এইচ।

@JoelH। আপনি বর্তমানে যে রঙের স্থানটি ব্যবহার করছেন তা পরীক্ষা করুন।
রিচার্ড জে। রস তৃতীয়

19
আপনি এটি কীভাবে ব্যবহার করেন সে সম্পর্কে সতর্ক থাকুন, কারণ এটি পরবর্তী আইওএস রিলিজে পরিবর্তিত হতে পারে।
জেভ আইজেনবার্গ

7
হ্যাঁ, সম্ভাব্যভাবে পরিবর্তিত হতে পারে এমন কোনও মানই হার্ড-কোড করা ভাল ধারণা নয়। বিশেষত যখন আসল মানটি অনুসন্ধান করার জন্য একটি এপিআই থাকে।
নিকোলাস মিয়ারি

1
সুইফ্ট সংস্করণUIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)
ডগ আমোস

90

আইওএস default এর ডিফল্ট নীল রঙ R:0.0 G:122.0 B:255.0

UIColor *ios7BlueColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];

51
এবং যদি আপনি হেক্স পছন্দ করেন:0x007aff
জেসন মুর

4
এটি খুব ভবিষ্যতের প্রমাণ নয় - যদি অ্যাপল ডিফল্ট রঙিন রঙ পরিবর্তন করে বা ব্যবহারকারীদের ডিফল্ট রঙিন রঙ সেট করতে দেয় তবে আপনার অ্যাপ্লিকেশন সঠিক রঙ পাবেন না।
প্রাকউয়েট

4
এবং অন্য সিস্টেমে: # 007AFF
daleijn

3
সুইফ্টে: ডিফল্টটিটিন্টকালার = ইউআইক্লোর (লাল: 0.0, সবুজ: 122/255, নীল: 1.0, আলফা: 1)
জার্ভিসবায়ে

49

ইউআইবাটনের ডকুমেন্টেশন অনুসারে:

আইওএস ভি .0.০-তে, ইউআইভিউর সমস্ত সাবক্লাসগুলি বেস ক্লাস থেকে টিন্টকলারের জন্য তাদের আচরণ অর্জন করে। আরও তথ্যের জন্য ইউআইভিউ স্তরে টিন্টকলার আলোচনা দেখুন See

ধরে নিই যে ডিফল্ট মানটি ধরার আগে আপনি রঙিন রঙ পরিবর্তন করেন না, আপনি এটি ব্যবহার করতে পারেন:

self.view.tintColor

রঙটি ধরার সবচেয়ে নিরাপদ উপায় বলে মনে হচ্ছে।
ক্লিফ হেলসেল

এটি আমার পক্ষে কাজ করে। আমার sharedApplication()একটি নেই keyWindowসঙ্গেtintColor
SimplGy

26

ডিফল্ট সিস্টেমের রঙিন রঙ পেতে এখানে একটি সহজ পদ্ধতি:

+ (UIColor*)defaultSystemTintColor
{
   static UIColor* systemTintColor = nil;
   static dispatch_once_t onceToken;
   dispatch_once(&onceToken, ^{
      UIView* view = [[UIView alloc] init];
      systemTintColor = view.tintColor;
   });
   return systemTintColor;
}

মূল থ্রেড স্টাফের জন্য আপনার একবার প্রেরণের দরকার নেই। একটি সরল যদি শূন্যতা যথেষ্ট হবে।
মালহাল

6
কেন ধরে নিবেন যে পদ্ধতিটি কেবলমাত্র মূল থ্রেড থেকে বলা হবে? ওভারহেডটি dispatch_onceখুব কম এবং সাধারণ ক্ষেত্রে যদি এটি পরীক্ষা করা হয় তবে এটি একক।
রিক

@ রিক কারণ ইউআইকিট API গুলি ব্যাকগ্রাউন্ড থ্রেড-নিরাপদ নয়, তাই মূল থ্রেডের বাইরে এটিকে কল করার অনুমতি নেই।
অ্যান্ড্রে তারানসনভ

@AndreyTarantsov সত্যি যে, কিন্তু এটা হয় ব্যবহার করা নিরাপদ UIColorএকাধিক থ্রেড উপর। এটিকে মোড়কে dispatch_onceকোনও থ্রেডে এই রঙটি নিরাপদে পুনরুদ্ধার করতে দেয় allows এবং আবারও, ওভারহেড খুব কম।
রিক

3
একটি দ্রুত পরীক্ষা থেকে অ্যান্ড্রেটানটসভকে দেখে মনে হচ্ছে এটি ঠিকঠাক কাজ করছে। ইউআইভিআইইউ ডকুমেন্টেশন থেকে : "আপনার অ্যাপ্লিকেশনটির ইউজার ইন্টারফেসে ম্যানিপুলেশনগুলি অবশ্যই মূল থ্রেডে ঘটে Thus সুতরাং আপনার অ্যাপ্লিকেশনটির মূল থ্রেডে চলমান কোড থেকে আপনার সর্বদা ইউআইভিউ ক্লাসের পদ্ধতিগুলি কল করা উচিত The একমাত্র সময় এটি কঠোরভাবে নাও হতে পারে ভিউ অবজেক্টটি নিজে তৈরি করার সময় প্রয়োজনীয় তবে অন্য সমস্ত ম্যানিপুলেশনগুলি মূল থ্রেডে হওয়া উচিত।
রিক


16

দ্রুত 4 উপায়:

extension UIColor {
  static let system = UIView().tintColor!
}

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

@ স্ট্যানিসালুবাড়ানসকি তাদের কেন এটি পরিবর্তন করা উচিত? দয়া করে আপনার
বক্তব্যটি

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

15

এই এক্সটেনশনটি আপনাকে দেশীয় সিস্টেমকে নীল রঙ দেয়।

extension UIColor {

    static var systemBlue: UIColor {
        return UIButton(type: .system).tintColor
    }

}

হালনাগাদ

দয়া করে আমি উপরে যা লিখেছি তা ভুলে যান, স্রেফ ভেবে দেখলেন - সিস্টেম নীল সহ আমরা যা খুঁজছি তার পূর্বনির্ধারিত সিস্টেম রঙের সাথে দেশীয় বর্ধন রয়েছে :

// System colors

extension UIColor {


    /* Some colors that are used by system elements and applications.
     * These return named colors whose values may vary between different contexts and releases.
     * Do not make assumptions about the color spaces or actual colors used.
     */

    ... 

    @available(iOS 7.0, *)
    open class var systemBlue: UIColor { get }
    ... 
}

আপনি এটি সরাসরি ব্যবহার করতে পারেন:

myView.tintColor = .systemBlue

1
আপনি সিস্টেমব্লিউয়ের জন্য যতবার জিজ্ঞাসা করবেন এটি একবারে এইআইআই বাটন তৈরি করবে এটি একবারে এই রঙ শুরু করার জন্য আরও ভাল। অভ্যন্তরীণ এক্সটেনশনে অভ্যন্তরীণ শব্দ ব্যবহার করা বন্ধুত্বপূর্ণ নয়। স্থির পরিবর্তে ক্লাস ব্যবহারের জন্য একই। এবং এটিকে "নীল" বলা ঠিক নয়, কারণ এই রঙটি পরে ম্যাকওএস মোজাবের মতো পরিবর্তন করা যেতে পারে। সুতরাং static let system = UIView().tintColor!এখনও আপনার বৈকল্পিক চেয়ে অনেক ভাল।
দিমিত্রি কোজলভ

@ দিমিত্রি কোজলভ ঠিক বলেছেন, স্থির কারণে মেমরির পারফরম্যান্স ব্যবহার করা আরও ভাল। এটি নির্দেশ করার জন্য ধন্যবাদ। তবে এটিকে "নীল" বলা এখনও iOS 12 পর্যন্ত কাজ করে এবং এটি ম্যাকোসের সাথে মোটেই সম্পর্কিত নয়। ম্যাকোসের জন্য আপনাকে এনএস কালার প্রকারের সাথে ডিল করতে হবে।
স্টানিসালু বারানোসকি


10

UIWindow.tintColorপদ্ধতি iOS8 আমার জন্য কাজ করা হয় নি (এটা এখনও কালো ছিল না), তাই আমি এই কি ছিল:

let b = UIButton.buttonWithType(UIButtonType.System) as UIButton
var color = b.titleColorForState(.Normal)

এটি একটিতে যথাযথ নীল রঙ দেওয়া দেখায় UIBarButtonItem


কিছুটা নোংরা লাগছে, তবে সময় মতো পরিবর্তিত হতে পারে এমন একটি লিঙ্কের রঙ হার্ডকোডিংয়ের চেয়ে ভাল।
টাইমগার্লসন

7

আইওএস 7 থেকে একটি এপিআই রয়েছে এবং আপনি এটির সাথে রঙিন রঙটি পেতে (এবং সেট করতে পারেন):

self.view.tintColor

অথবা আপনার যদি সিজি রঙের প্রয়োজন হয়:

self.view.tintColor.CGColor

6

অনেক ক্ষেত্রে আপনার যা প্রয়োজন তা ন্যায়সঙ্গত

[self tintColor] 
// or if in a ViewController
[self.view tintColor]

বা দ্রুত জন্য

self.tintColor
// or if in a ViewController
self.view.tintColor

1
self.view.tint কালার আরও সম্ভবত
মলাল

3

রঙ সেট করার সময় আপনি এই জাতীয় রঙ সেট করতে পারেন

[UIColor colorWithRed:19/255.0 green:144/255.0 blue:255/255.0 alpha:1.0]

কেন /255.0প্রতিটি rgbমান দিয়ে লেখার প্রয়োজন ?
আদিল মালিক

7
কারণ ম্যাকের রঙগুলি 0.0 এবং 1.0 এর মধ্যে একটি ভাসমান।
মালহাল

2

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

@interface UIColor (iOS7Colors)

+ (instancetype)iOS7blueColor;

@end

@implementation UIColor (SpecialColors)

+ (instancetype)iOS7blueColor;
{
    return [UIColor colorWithRed:0.0f green:0.22f blue:122.0/255.0 alpha:1.0f];
}

আপনি একবার আপনার কোডে বিভাগটি আমদানি করলে আপনি ব্যবহার করে রঙটি কল করতে পারেন:

UIColor *myBlueColor = [UIColor iOSblueColor];

অনুগ্রহ করে কীভাবে উত্তর না দেওয়া যায় তা বোঝার জন্য দয়া করে এই স্ট্যাকওভারফ্লো.com / help / deleted-answers পড়ার চেষ্টা করুন । যথা: "যে উত্তরগুলি মৌলিকভাবে প্রশ্নের উত্তর দেয় না": বাহ্যিক সাইটের লিঙ্কের চেয়ে সবেমাত্র বেশি
Radim Köhler

আমরা থেকে পেতে উহ কীভাবে blueকরতে redমধ্যে+ (instancetype)iOS7redColor;
ta.speot.is
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.