এক্সকোড 5 এবং সম্পদ ক্যাটালগ: লঞ্চচঞ্চকে কীভাবে রেফারেন্স করতে হবে?


102

আমি এক্সকোড 5 এর সম্পদ ক্যাটালগ ব্যবহার করছি, এবং আমি LaunchImageআমার বাড়ির দৃশ্যের পটভূমি চিত্র হিসাবে ব্যবহার করতে চাই ('লোডিং' থেকে 'লোড' থেকে মসৃণ চেহারাতে রূপান্তর করার জন্য একটি সাধারণ প্রচলিত অভ্যাস)।

আমি স্থান বাঁচাতে অ্যাসেট ক্যাটালগটিতে একই এন্ট্রিটি ব্যবহার করতে চাই এবং দুটি পৃথক চিত্র সেটে চিত্রটির অনুলিপি করতে হবে না।

তবে, কল করা:

UIImage *image = [UIImage imageNamed:@"LaunchImage"]; //returns nil

উত্তর:


83

এটি লঞ্চচিহ্নের (প্রায়) সম্পূর্ণ তালিকা (কোনও স্ট্যাটাস বার ছাড়া আইপ্যাড চিত্রগুলি বাদ দিয়ে):

  • LaunchImage-568h@2x.png
  • LaunchImage-700-568h@2x.png
  • LaunchImage-700-Landscape@2x~ipad.png
  • LaunchImage -700-ল্যান্ডস্কেপ ~ ipad.png
  • LaunchImage-700-Portrait@2x~ipad.png
  • LaunchImage -700-প্রতিকৃতি ~ ipad.png
  • LaunchImage-700@2x.png
  • LaunchImage-Landscape@2x~ipad.png
  • LaunchImage-ল্যান্ডস্কেপ ~ ipad.png
  • LaunchImage-Portrait@2x~ipad.png
  • LaunchImage-প্রতিকৃতি ~ ipad.png
  • LaunchImage.png
  • LaunchImage@2x.png
  • LaunchImage-800-667h@2x.png (আইফোন 6)
  • LaunchImage-800- প্রতিকৃতি-736h@3x.png (আইফোন 6 প্লাস প্রতিকৃতি)
  • LaunchImage-800- ল্যান্ডস্কেপ-736h@3x.png (আইফোন 6 প্লাস ল্যান্ডস্কেপ)
  • LaunchImage-1100- প্রতিকৃতি-2436h@3x.png (আইফোন এক্স প্রতিকৃতি)
  • LaunchImage-1100- ল্যান্ডস্কেপ-2436h@3x.png (আইফোন এক্স ল্যান্ডস্কেপ)

স্ট্যাটাস বার ছাড়া আইপ্যাডের চিত্রগুলি কি কেউ জানেন?
মোহাম্মদ হাফেজ

1
@ মোহাম্মদ হাফেজ: পিচারিচি আসলে তাদের তালিকাতে অন্তর্ভুক্ত করেছে। এগুলি হ'ল লঞ্চইমেজ-পোর্ট্রেট ~ আইপ্যাড.পিএনজি, লঞ্চ-ইমেজ-পোর্ট্রেইট@2x~ipad.png, লঞ্চ-ইমেজ-ল্যান্ডস্কেপ ip আইপ্যাড.পিএনজি এবং লাঞ্চ-ইমেজ-ল্যান্ডস্কেপ@2x~ipad.png।
জন জ্যাসেকো

সংখ্যা 700 এবং 800 এর অর্থ কী?
সাউন্ড ব্লাস্টার

2
আমি এটি ধরেছি: এর অর্থ আইওএস 7 এবং 8
সাউন্ড ব্লাস্টার

4
এটি অবিশ্বাস্যরূপে বিরক্তিকর যে এক্সকোড স্বয়ংক্রিয়ভাবে এই চিত্রগুলির সম্পদের জন্য একটি ফাইলের নাম তৈরি করবে এবং কীভাবে সরাসরি তাদের অ্যাক্সেস করবেন তা নির্ধারণের জন্য আপনাকে হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়বে ...
মিঃ টি

67
- (NSString *)splashImageNameForOrientation:(UIInterfaceOrientation)orientation {
    CGSize viewSize = self.view.bounds.size;
    NSString* viewOrientation = @"Portrait";
    if (UIDeviceOrientationIsLandscape(orientation)) {
        viewSize = CGSizeMake(viewSize.height, viewSize.width);
        viewOrientation = @"Landscape";
    }

    NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
    for (NSDictionary* dict in imagesDict) {
        CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
        if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])
            return dict[@"UILaunchImageName"];
    }
    return nil;
}

1
দুর্দান্ত কাজ করে। উপলব্ধ লঞ্চ চিত্রগুলির জন্য মূল বান্ডেলের তথ্য অভিধানটি অনুসন্ধান করার জন্য চতুর এবং মার্জিত পদ্ধতির এবং তারপরে ম্যাচিং রেজোলিউশনের সাথে একটিটি বাছাই করুন!
আইওএসএক্স

1
এটি একটি উজ্জ্বল ধারণা, আমার থেকে ভাল এবং ভবিষ্যতের প্রমাণও, যদি না অ্যাপল তথ্য.প্লেস্টের কাঠামো পরিবর্তন করে।
ননামেলাইভ

1
এটি একটি খুব চালাক সমাধান। আমার এক্সকোড প্রকল্পগুলিতে আমার একাধিক লক্ষ্যবস্তু রয়েছে এবং কেবলমাত্র লঞ্চইমেজ স্ট্রিং ব্যবহার করা সর্বদা সঠিক চিত্রটি ফিরিয়ে দেয় না। অনেক ধন্যবাদ.
এনরিকো সুস্যাতিयो

3
যদিও উজ্জ্বল ধারণা। তবে অস্বচ্ছ স্ট্যাটাস বার সহ পর্দার জন্য কাজ করে না। সুতরাং .bounds.size [UIScreen mainScreen] এ পরিবর্তন self.view.bounds.size করা প্রয়োজন
রামকৃষ্ণ Chunduri

1
দুর্দান্ত সমাধান। ছোট সম্পাদনা প্রয়োজন: ইউআইআইএনটারফেস ওরিয়েন্টেশন থেকে ইউআইডিভাইস ওরিয়েন্টেশন এ একটি অন্তর্নিহিত রূপান্তর আছে। UIInterfaceOrientationIsLandscape()পরিবর্তে ব্যবহার করুন।
আলমোগ সি

53

LaunchImages বিশেষ, এবং আসলে ডিভাইসে কোনও সম্পদ ক্যাটালগ নয়। আপনি যদি আইফুনবক্স / আইএক্সপ্লোরার / ইত্যাদি ব্যবহার করে দেখতে (বা সিমুলেটারে বা বিল্ড ডিরেক্টরিতে) ব্যবহার করতে চান তবে আপনি চূড়ান্ত নামগুলি দেখতে পারেন এবং সেগুলি ব্যবহারের জন্য কোড লিখতে পারেন - যেমন। কেবলমাত্র iOS7- কেবল আইফোন-কেবল প্রকল্পের জন্য, এটি সঠিক লঞ্চ চিত্রটি সেট করবে:

NSString *launchImage;
if  ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) &&
     ([UIScreen mainScreen].bounds.size.height > 480.0f)) {
    launchImage = @"LaunchImage-700-568h";
} else {
    launchImage = @"LaunchImage-700";
}

[self.launchImageView setImage:[UIImage imageNamed:launchImage]];

আমি এটিকে ভিডিডল্ডে রেখেছি।

এটি সত্যিই আদর্শ নয়, এটি দুর্দান্ত হবে যদি অ্যাপল আমাদের এটির জন্য একটি দুর্দান্ত এপিআই দেয়।


2
এটি আমার পক্ষে কাজ করেছিল, তবে আমি সত্যিই লঞ্চ চিত্রটি উল্লেখ করার সহজ উপায় থাকতে চাই।
জোড়ায়র

এক্সকোড 5.0.2 এ সংশোধন করা হতে পারে - নীচে দেখুন, "LaunchImage.png" রেফারেন্সের জন্য কেবল আমার জন্য কাজ করছে বলে মনে হচ্ছে
অ্যাডাম

1
@ অ্যাডাম যদি এটি সত্য হয় পছন্দ করতেন! আমি সবেমাত্র আইফোন 5 / এক্সকোড 5.0.2 / ios7.0.4 এ চেষ্টা করেছি, [UII छवि চিত্রনামযুক্ত: @ "LaunchImage.png"] আমাকে শূন্য করে।
জোসেফ এইচ

পছন্দ করেছেন সম্ভবত এটির জন্য একটি নতুন নির্মিত প্রকল্পের প্রয়োজন? এটি এক্সকোড 5.0.2 এ নির্মিত একটি প্রকল্প, কেবলমাত্র ডিফল্টগুলিতে পরিবর্তন হয়েছিল "অক্ষম এআরসি"। এটা দুর্দান্ত কাজ করছে :)। আমি অন্য কিছু খুঁজে পেতে পারি কিনা তা আমি দেখতে পাব, তবে আমি কী পরিবর্তন করতে পেরেছি তা ভাবতে পারি না
অ্যাডাম

আমি অনুরূপ কোড চেষ্টা করছিলাম তবে "ডিফল্ট" এবং "ডিফল্ট -568h" (আসল সংস্থান ফাইলের নাম) ব্যবহার করছি। এক্সপোর্ট করা অ্যাপ্লিকেশন বান্ডেলের ভিতরে দেখার পরে, আমি বুঝতে পেরেছিলাম যে এক্সকোড নামগুলি "লাঞ্চইমেজ -700 *" এ পরিবর্তন করে।
নিকোলাস মিয়ারি

27

আমার অ্যাপ্লিকেশনটি কেবলমাত্র iOS 7 এবং তারপরে সমর্থন করে।

সম্পদ ক্যাটালগ থেকে লঞ্চ চিত্রটি আমি এভাবেই উল্লেখ করি:

NSDictionary *dict = @{@"320x480" : @"LaunchImage-700",
                       @"320x568" : @"LaunchImage-700-568h",
                       @"375x667" : @"LaunchImage-800-667h",
                       @"414x736" : @"LaunchImage-800-Portrait-736h"};
NSString *key = [NSString stringWithFormat:@"%dx%d",
    (int)[UIScreen mainScreen].bounds.size.width,
    (int)[UIScreen mainScreen].bounds.size.height];
UIImage *launchImage = [UIImage imageNamed:dict[key]];

আপনি যদি পুরানো আইওএস সংস্করণ সমর্থন করতে চান তবে আপনি আরও কী মান যুক্ত করতে পারেন।


1
নোট করুন যে আইওএস 8 দিয়ে শুরু করা UIScreen.mainScreen.boundsবর্তমান ইন্টারফেস অরিয়েন্টেশনের উপর নির্ভর করে আলাদা। দেখুন stackoverflow.com/a/24153540/158525
জাঁ Regisser

1
এর জন্য ধন্যবাদ, আমি ঠিক যা খুঁজছিলাম!
জোসেফ পিটারসন

এইচটিআইএসের জন্য ধন্যবাদ, অ্যাপ আইকনগুলি অ্যাক্সেস করার কোনও পদ্ধতি?
আসিফহবিব

10

উপরে চেরপাক ইভজেনি প্রদত্ত সমাধানের উপর ভিত্তি করে ইউআইআইমেজে একটি বিভাগ।

ইউআইআইমেজ + স্প্ল্যাশআইমেজ h :

#import <UIKit/UIKit.h>

/**
 * Category on `UIImage` to access the splash image.
 **/
@interface UIImage (SplashImage)

/**
 * Return the name of the splash image for a given orientation.
 * @param orientation The interface orientation.
 * @return The name of the splash image.
 **/
+ (NSString *)si_splashImageNameForOrientation:(UIInterfaceOrientation)orientation;

/**
 * Returns the splash image for a given orientation.
 * @param orientation The interface orientation.
 * @return The splash image.
 **/
+ (UIImage*)si_splashImageForOrientation:(UIInterfaceOrientation)orientation;

@end

ইউআইআইমেজ + স্প্ল্যাশআইমেজ.মি :

#import "UIImage+SplashImage.h"

@implementation UIImage (SplashImage)

+ (NSString *)si_splashImageNameForOrientation:(UIInterfaceOrientation)orientation
{
    CGSize viewSize = [UIScreen mainScreen].bounds.size;

    NSString *viewOrientation = @"Portrait";

    if (UIDeviceOrientationIsLandscape(orientation))
    {
        viewSize = CGSizeMake(viewSize.height, viewSize.width);
        viewOrientation = @"Landscape";
    }

    NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];

    for (NSDictionary *dict in imagesDict)
    {
        CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
        if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])
            return dict[@"UILaunchImageName"];
    }
    return nil;
}

+ (UIImage*)si_splashImageForOrientation:(UIInterfaceOrientation)orientation
{
    NSString *imageName = [self si_splashImageNameForOrientation:orientation];
    UIImage *image = [UIImage imageNamed:imageName];
    return image;
}

@end

ইমেজনমেড চিত্রটিকে সিস্টেম ক্যাশে ঠেলে দেয় তবে লঞ্চ চিত্রটি মাঝে মাঝে খুব বিশাল হয়, তাই ক্যাশে এটি ফ্লাশ না করা অবধি স্মৃতিতে থাকে
ইগর পলাগুটা

9

@ কোডম্যানের উত্তরটি সুইফট ১.২ এর জন্য আপডেট হয়েছে:

func splashImageForOrientation(orientation: UIInterfaceOrientation, size: CGSize) -> String? {
    var viewSize        = size
    var viewOrientation = "Portrait"

    if UIInterfaceOrientationIsLandscape(orientation) {
        viewSize        = CGSizeMake(size.height, size.width)
        viewOrientation = "Landscape"
    }

    if let imagesDict = NSBundle.mainBundle().infoDictionary as? [String: AnyObject] {
        if let imagesArray = imagesDict["UILaunchImages"] as? [[String: String]] {
            for dict in imagesArray {
                if let sizeString = dict["UILaunchImageSize"], let imageOrientation = dict["UILaunchImageOrientation"] {
                    let imageSize = CGSizeFromString(sizeString)
                    if CGSizeEqualToSize(imageSize, viewSize) && viewOrientation == imageOrientation {
                        if let imageName = dict["UILaunchImageName"] {
                            return imageName
                        }
                    }
                }
            }
        }
    }

    return nil

}

এটিকে কল করতে এবং আইওএস 8 এর জন্য রোটেশন সমর্থন করতে:

override func viewWillAppear(animated: Bool) {
    if let img = splashImageForOrientation(UIApplication.sharedApplication().statusBarOrientation, size: self.view.bounds.size) {
        backgroundImage.image = UIImage(named: img)
    }
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    let orientation = size.height > size.width ? UIInterfaceOrientation.Portrait : UIInterfaceOrientation.LandscapeLeft

    if let img = splashImageForOrientation(orientation, size: size) {
        backgroundImage.image = UIImage(named: img)
    }

}

আমার যা প্রয়োজন, ধন্যবাদ!


7

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

+(NSString*)getLaunchImageName
{

 NSArray* images= @[@"LaunchImage.png", @"LaunchImage@2x.png",@"LaunchImage-700@2x.png",@"LaunchImage-568h@2x.png",@"LaunchImage-700-568h@2x.png",@"LaunchImage-700-Portrait@2x~ipad.png",@"LaunchImage-Portrait@2x~ipad.png",@"LaunchImage-700-Portrait~ipad.png",@"LaunchImage-Portrait~ipad.png",@"LaunchImage-Landscape@2x~ipad.png",@"LaunchImage-700-Landscape@2x~ipad.png",@"LaunchImage-Landscape~ipad.png",@"LaunchImage-700-Landscape~ipad.png"];

UIImage *splashImage;

if ([self isDeviceiPhone])
{
    if ([self isDeviceiPhone4] && [self isDeviceRetina])
    {
        splashImage = [UIImage imageNamed:images[1]];
        if (splashImage.size.width!=0)
            return images[1];
        else
            return images[2];
    }
    else if ([self isDeviceiPhone5])
    {
        splashImage = [UIImage imageNamed:images[1]];
        if (splashImage.size.width!=0)
            return images[3];
        else
            return images[4];
    }
    else
        return images[0]; //Non-retina iPhone
}
else if ([[UIDevice currentDevice] orientation]==UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)//iPad Portrait
{
    if ([self isDeviceRetina])
    {
        splashImage = [UIImage imageNamed:images[5]];
        if (splashImage.size.width!=0)
            return images[5];
        else
            return images[6];
    }
    else
    {
        splashImage = [UIImage imageNamed:images[7]];
        if (splashImage.size.width!=0)
            return images[7];
        else
            return images[8];
    }

}
else
{
    if ([self isDeviceRetina])
    {
        splashImage = [UIImage imageNamed:images[9]];
        if (splashImage.size.width!=0)
            return images[9];
        else
            return images[10];
    }
    else
    {
        splashImage = [UIImage imageNamed:images[11]];
        if (splashImage.size.width!=0)
            return images[11];
        else
            return images[12];
    }
 }
}

অন্যান্য ইউটিলিটি পদ্ধতি হ'ল

+(BOOL)isDeviceiPhone
{
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
 {
     return TRUE;
 }

 return FALSE;
}

+(BOOL)isDeviceiPhone4
{
 if ([[UIScreen mainScreen] bounds].size.height==480)
    return TRUE;

 return FALSE;
}


+(BOOL)isDeviceRetina
{
 if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0))        // Retina display
 {
    return TRUE;
 } 
 else                                          // non-Retina display
 {
     return FALSE;
 }
}


+(BOOL)isDeviceiPhone5
{
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height>480)
 {
    return TRUE;
 }
 return FALSE;
}

আইডিসিআইফোন 4-এর জন্য এই কোডটিতে আসলে একটি সামান্য বাগ রয়েছে: [[ইউআইস স্ক্রিন মেনস্ক্রিন] গণ্ডি] এখন আইওএস ৮ এর অধীনে আপনি কী অরিয়েন্টেশন ভিত্তিতে রয়েছেন তার উপর ভিত্তি করে পরিবর্তিত হয় আপনাকে এ জাতীয় কিছু করার মতো স্পষ্টরূপে একটি প্রতিকৃতি সীমানায় রূপান্তর [screen.coordinateSpace convertRect:screen.bounds toCoordinateSpace:screen.fixedCoordinateSpace]করতে হবে: আপনি প্রথমে আইওএস 8 এ থাকলে পরীক্ষা করার বিষয়ে নিশ্চিত হোন অন্যথায় এটি ক্র্যাশ হয়ে যাবে।
মোহাম্মদ হাফেজ

এটি নির্দেশ করার জন্য @ হাফেজকে ধন্যবাদ, আমি এটি iOS 8 এর জন্য পরীক্ষা করব এবং শীঘ্রই উত্তরটি আপডেট করব।
জাহের

7

চেরপাক এভজিনির উত্তরের সুইফ্ট সংস্করণ:

    func splashImageForOrientation(orientation: UIInterfaceOrientation) -> String {
        var viewSize = self.view.bounds.size
        var viewOrientation = "Portrait"
        if UIInterfaceOrientationIsLandscape(orientation) {
           viewSize = CGSizeMake(viewSize.height, viewSize.width)
           viewOrientation = "Landscape"
        }
        let imagesDict = NSBundle.mainBundle().infoDictionary as Dictionary<NSObject,AnyObject>!
        let imagesArray = imagesDict["UILaunchImages"] as NSArray
        for dict in imagesArray {
            let dictNSDict = dict as NSDictionary
            let imageSize = CGSizeFromString(dictNSDict["UILaunchImageSize"] as String)
            if CGSizeEqualToSize(imageSize, viewSize) && viewOrientation == (dictNSDict["UILaunchImageOrientation"] as String) {
                return dictNSDict["UILaunchImageName"] as String
            }
        }
        return ""
    }

5

পিচিরিচের উত্তর অনুসরণ করে, আমি আমার লঞ্চের চিত্রটি ইন্টারফেসবিল্ডারে উল্লেখ করেছি:

"LaunchImage.png"

... এবং এক্সকোড 5.0.2 এর সাহায্যে এটি স্বয়ংক্রিয়ভাবে যথাযথ চিত্রটি সম্পদ ক্যাটালগের বাইরে সরাসরি আনতে চলেছে।

এটিই আমি প্রত্যাশা করছিলাম - অ্যাপলের চুপচাপ 'লাফিয়েইজ.মেজ.পিএনজি' নামকরণ করে "ডিফল্ট.পিএনজি" নামকরণের দুষ্ট পদক্ষেপ ব্যতীত :)


আরও একটি বিষয় লক্ষ্য করা উচিত। এই চিত্রগুলির আকারগুলি হ'ল অ্যাপল সুপারিশের মতো হওয়া উচিত (উদাহরণস্বরূপ আইওএস 5-6 আইফোন 3 জিএসের জন্য লঞ্চইমজেশনের জন্য 320x480), অন্যথায় এটি nilসূচনা হওয়ার পরে হবে
আলেকজান্ডার কোস্টিভ

3

ইন ডকুমেন্টেশন সেখানে পরিষ্কারভাবে বিবৃত হয়:

"একটি সম্পদ ক্যাটালগ প্রতিটি সেট একটি হয়েছে নামআপনি যে নাম ব্যবহার করতে পারেন প্রোগ্রামেটিক্যালি লোড করতে কোনো ব্যক্তি ইমেজ সেট অন্তর্ভুক্ত একটি চিত্র লোড করার জন্য, কল। UIImage: ImageNamed: পদ্ধতি, সেট যে ইমেজ ধারণকারী নাম ক্ষণস্থায়ী । "

পিচিরিচের তালিকা ব্যবহার করা এই অসঙ্গতি সমাধান করতে সহায়তা করে।


1
"সেটটির নাম" অংশটি নোট করুন। আমার সম্পত্তির ক্যাটালগটি দেখে, আমার কাছে "LaunchImage" নামে একটি সেট রয়েছে। লঞ্চ চিত্রটি লোড করতে, আমি তখন ডাকলাম: UIImageView *myView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LaunchImage"]];দুর্দান্ত কাজ করে!
লিয়ান

1
পিচিরিচির তালিকা ব্যবহার করার দরকার নেই (এমন ধারণা ভাবার পরেও এখনও দুর্দান্ত তথ্য রয়েছে) - কেবল সম্পদ ক্যাটালগের "সেট" এর নামটি ব্যবহার করুন।
লুয়ান

2
ঠিক আছে, আমার জন্য এটি এক্সকোড 6.0.1 এবং আইওএস 8 তে লঞ্চ ইমেজটির জন্য কাজ করে না The লঞ্চইমেজটি বিশেষ বলে মনে হচ্ছে কারণ চিত্রগুলি পৃথকভাবে সংকলিত অ্যাপ্লিকেশন বান্ডেলে শেষ হয় এবং এক্সক্যাসেট বান্ডিল ফোল্ডারের ভিতরে না থাকে।
auco

যদি স্বতন্ত্র নামযুক্ত সেটগুলি সহ দুটি পৃথক সম্পদ ক্যাটালগ থাকে তবে কী হবে? [UIImage imageNamed:..]কোনটি বেছে নেবে কীভাবে জানবে?
কার্লোস পি

আমার জন্য এটি কার্যকর হয় না, এক্সকোড 6.0.1 আইওএস 7 আইপড টাচ
দেব

3

কোডের এক লাইনের মাধ্যমে কেউ লঞ্চ চিত্রটি সহজেই অ্যাক্সেস করতে পারে।

 UIImage *myAppsLaunchImage = [UIImage launchImage];

উপরে বর্ণিত কার্যকারিতা অর্জন করতে দয়া করে নীচে প্রদত্ত পদক্ষেপগুলি অনুসরণ করুন।

পদক্ষেপ 1.UIImage একটি বিভাগ তৈরি করে শ্রেণিপ্রসারিতকরুন এবং এটিতে নিম্নলিখিত পদ্ধতি যুক্ত করুন।

+ (UIImage *)launchImage {
    NSDictionary *dOfLaunchImage = [NSDictionary dictionaryWithObjectsAndKeys:
                                    @"LaunchImage-568h@2x.png",@"568,320,2,8,p", // ios 8 - iphone 5 - portrait
                                    @"LaunchImage-568h@2x.png",@"568,320,2,8,l", // ios 8 - iphone 5 - landscape
                                    @"LaunchImage-700-568h@2x.png",@"568,320,2,7,p", // ios 7 - iphone 5 - portrait
                                    @"LaunchImage-700-568h@2x.png",@"568,320,2,7,l", // ios 7 - iphone 5 - landscape
                                    @"LaunchImage-700-Landscape@2x~ipad.png",@"1024,768,2,7,l", // ios 7 - ipad retina - landscape
                                    @"LaunchImage-700-Landscape~ipad.png",@"1024,768,1,7,l", // ios 7 - ipad regular - landscape
                                    @"LaunchImage-700-Portrait@2x~ipad.png",@"1024,768,2,7,p", // ios 7 - ipad retina - portrait
                                    @"LaunchImage-700-Portrait~ipad.png",@"1024,768,1,7,p", // ios 7 - ipad regular - portrait
                                    @"LaunchImage-700@2x.png",@"480,320,2,7,p", // ios 7 - iphone 4/4s retina - portrait
                                    @"LaunchImage-700@2x.png",@"480,320,2,7,l", // ios 7 - iphone 4/4s retina - landscape
                                    @"LaunchImage-Landscape@2x~ipad.png",@"1024,768,2,8,l", // ios 8 - ipad retina - landscape
                                    @"LaunchImage-Landscape~ipad.png",@"1024,768,1,8,l", // ios 8 - ipad regular - landscape
                                    @"LaunchImage-Portrait@2x~ipad.png",@"1024,768,2,8,p", // ios 8 - ipad retina - portrait
                                    @"LaunchImage-Portrait~ipad.png",@"1024,768,1,8,l", // ios 8 - ipad regular - portrait
                                    @"LaunchImage.png",@"480,320,1,7,p", // ios 6 - iphone 3g/3gs - portrait
                                    @"LaunchImage.png",@"480,320,1,7,l", // ios 6 - iphone 3g/3gs - landscape
                                    @"LaunchImage@2x.png",@"480,320,2,8,p", // ios 6,7,8 - iphone 4/4s - portrait
                                    @"LaunchImage@2x.png",@"480,320,2,8,l", // ios 6,7,8 - iphone 4/4s - landscape
                                    @"LaunchImage-800-667h@2x.png",@"667,375,2,8,p", // ios 8 - iphone 6 - portrait
                                    @"LaunchImage-800-667h@2x.png",@"667,375,2,8,l", // ios 8 - iphone 6 - landscape
                                    @"LaunchImage-800-Portrait-736h@3x.png",@"736,414,3,8,p", // ios 8 - iphone 6 plus - portrait
                                    @"LaunchImage-800-Landscape-736h@3x.png",@"736,414,3,8,l", // ios 8 - iphone 6 plus - landscape
                                    nil];
    NSInteger width = ([UIScreen mainScreen].bounds.size.width>[UIScreen mainScreen].bounds.size.height)?[UIScreen mainScreen].bounds.size.width:[UIScreen mainScreen].bounds.size.height;
    NSInteger height = ([UIScreen mainScreen].bounds.size.width>[UIScreen mainScreen].bounds.size.height)?[UIScreen mainScreen].bounds.size.height:[UIScreen mainScreen].bounds.size.width;
    NSInteger os = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] integerValue];
    NSString *strOrientation = UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])?@"l":@"p";
    NSString *strImageName = [NSString stringWithFormat:@"%li,%li,%li,%li,%@",width,height,(NSInteger)[UIScreen mainScreen].scale,os,strOrientation];
    UIImage *imageToReturn = [UIImage imageNamed:[dOfLaunchImage valueForKey:strImageName]];
    if([strOrientation isEqualToString:@"l"] && [strImageName rangeOfString:@"Landscape"].length==0) {
        imageToReturn = [UIImage rotate:imageToReturn orientation:UIImageOrientationRight];
    }
    return imageToReturn;
}

পদক্ষেপ 2. উপরের পদ্ধতিটি একই কোডের মধ্যে নিম্নলিখিত কোড যুক্ত করে কাজ করা উচিতUIImage

static inline double radians (double degrees) {return degrees * M_PI/180;}

+ (UIImage *)rotate:(UIImage*)src orientation:(UIImageOrientation) orientation {
    UIGraphicsBeginImageContext(src.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    if (orientation == UIImageOrientationRight) {
        CGContextRotateCTM (context, radians(90));
    } else if (orientation == UIImageOrientationLeft) {
        CGContextRotateCTM (context, radians(-90));
    } else if (orientation == UIImageOrientationDown) {
        // NOTHING
    } else if (orientation == UIImageOrientationUp) {
        CGContextRotateCTM (context, radians(90));
    }
    [src drawAtPoint:CGPointMake(0, 0)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

দুর্দান্ত উত্তর, ধন্যবাদ!
dortzur

1
আইফোন এক্স লঞ্চ ইমেজের নাম এখন কী?
আরপিএম

2

আমি বুঝতে পেরেছি যে এটি অগত্যা সবার জন্য সেরা সমাধান নয় তবে এটি করার সহজতম উপায় (এবং সর্বনিম্ন ত্রুটি-প্রবণ, আইএমএইচও) আপনার চিত্রগুলি x আমি বলেছি SplashImage

আপনি যখন নতুন এন্ট্রি যুক্ত করতে যান, তখন বিকল্প হিসাবে "নতুন লঞ্চ চিত্র" নির্বাচন না করার বিষয়টি নিশ্চিত করুন। পরিবর্তে, জেনেরিক "নতুন চিত্র সেট" নির্বাচন করুন। এরপরে, পরিদর্শকটি খুলুন এবং সম্পর্কিত বিকল্পগুলি নির্বাচন করুন। যদি আপনি কেবল রেটিনা ডিভাইসগুলির জন্য তৈরি করে থাকেন তবে আমি যেমন ছিলাম, আপনি নিম্নলিখিতটি নির্বাচন করতে পারেন:

চিত্র পরিদর্শক

এটি আপনাকে চারটি এন্ট্রি (আইফোন 4 এস, আইফোন 5 (গুলি, সি), আইফোন 6, এবং আইফোন 6 প্লাস) ছাড়বে।

চিত্র

চিত্রগুলি সম্পর্কিত ফাইলগুলি নিম্নরূপ:

| Resolution (Xcode entry) | Launch Image name   |   Device         |
|--------------------------|---------------------|------------------|
| 1x                       | Default-750.png     | iPhone 6         |
| 2x                       | Default@2x.png      | iPhone 4S        |
| Retina 4 2x              | Default-568h@2x.png | iPhone 5, 5s, 5c |
| 3x                       | Default-1242.png    | iPhone 6 Plus    |

অবশ্যই, আপনি এটি করার পরে আপনি কেবল ব্যবহার করতে পারেন [UIImage imageNamed:@"SplashImage"]


1
আকর্ষণীয় ধারণা, তবে এটি আইফোন 6-তে কাজ করে না এটি আইফোন 6 সিমুলেটারে ডিফল্ট@2x.png চিত্রটি লোড করে।
ননামেলাইভ

এই পদ্ধতির ব্যবহার করে আপনার ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য লঞ্চ চিত্রগুলির সেট সম্পর্কেও যত্ন নেওয়া উচিত।
বেরেক

2

পিচিরিচির উত্তরের সাহায্যে আমি নিম্নলিখিত বিভাগটি প্রয়োগ করেছি (আইওএস 7+): ইউআইআইমেজ + অ্যাসেটল্যাঞ্চ আইমেজ

এটি আসলে ফ্লাইয়ে নাম উত্পন্ন করার চেয়ে কিছুটা বেশি তবে সম্ভবত সহায়ক হবে।


0

সর্বশেষতম সুইফট সিনট্যাক্সে আপডেট হয়েছে (সুইফট 5)

   func splashImageForOrientation(orientation: UIInterfaceOrientation) -> String? {

    var viewSize = screenSize
    var viewOrientation = "Portrait"
    if orientation.isLandscape {
        viewSize = CGSize(width: viewSize.height, height: viewSize.width)
        viewOrientation = "Landscape"
    }
    if let infoDict = Bundle.main.infoDictionary, let launchImagesArray = infoDict["UILaunchImages"] as? [Any] {
        for launchImage in launchImagesArray {
            if let launchImage = launchImage as? [String: Any], let nameString = launchImage["UILaunchImageName"] as? String, let sizeString = launchImage["UILaunchImageSize"] as? String, let orientationString = launchImage["UILaunchImageOrientation"] as? String {
                let imageSize = NSCoder.cgSize(for: sizeString)
                if imageSize.equalTo(viewSize) && viewOrientation == orientationString {
                    return nameString
                }
            }
        }
    }
    return nil
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.