আইফোন 5 (ওয়াইডস্ক্রিন ডিভাইস) কীভাবে সনাক্ত করবেন?


300

আমি মাত্র XCode 4.5 GM তে আপগ্রেড করেছি এবং জানতে পেরেছি যে আপনি এখন স্টোরিবোর্ডে আপনার ভিউ কন্ট্রোলারে '4 "রেটিনা" আকার প্রয়োগ করতে পারেন।

এখন যদি আমি একটি অ্যাপ্লিকেশন তৈরি করতে চাই যা আইফোন 4 এবং 5 উভয়ই চলমান, অবশ্যই আমাকে প্রতিটি উইন্ডো দু'বার তৈরি করতে হবে, তবে আমি এটিও সনাক্ত করতে হবে যে ব্যবহারকারীর আইফোনটি 3.5 "বা 4" স্ক্রিনযুক্ত আছে এবং তারপরে অ্যাপ্লিকেশনটি প্রয়োগ করতে হবে দেখতে।

আমি এটা কিভাবে করব?


2
আপনাকে প্রতিটি "উইন্ডো" দু'বার তৈরি করতে হবে না। কেবলমাত্র স্ক্রিনের আকারের সাথে যা মিলবে বলে মনে করা হচ্ছে তাদের পুনরায় ছড়িয়ে দিতে হবে। সমাধানটি বরং সুস্পষ্ট বলে মনে হচ্ছে, কেবল উইন্ডোটির মাত্রা যাচাই করুন এবং প্রত্যাবর্তিত আকারের উপর ভিত্তি করে কেস সিদ্ধান্ত যুক্ত করুন।
পর্যন্ত

1
ঠিক আছে, মূলত এটি সত্য, তবে আমি অতিরিক্ত পর্দার আকারটি সম্পূর্ণ ভিন্ন উপায়ে ব্যবহার করতে চাই, যেমন আপনি কোনও ল্যান্ডস্কেপ স্ক্রিনটি করতে পারেন।
ফিন গাইদা

: এই URL টি চেক stackoverflow.com/questions/4779221/...
ios_av

এই প্রশ্নটি নতুন ডিভাইসের সাথে সামঞ্জস্য করা উচিত? উদাহরণস্বরূপ "স্ক্রিনের আকার দ্বারা আইওএস ডিভাইস কীভাবে সনাক্ত করা যায়"?
hfossli

উত্তর:


467

প্রথমত, আপনার কোনও নতুন স্ক্রিন ফিট করার জন্য আপনার সমস্ত দৃষ্টিভঙ্গি পুনর্নির্মাণ করা উচিত নয়, বা বিভিন্ন স্ক্রিনের আকারের জন্য আলাদা আলাদা ভিউ ব্যবহার করা উচিত নয়।

আইওএসের স্বতঃ-পুনরায় আকার দেওয়ার ক্ষমতাগুলি ব্যবহার করুন , যাতে আপনার মতামতগুলি কোনও স্ক্রিনের আকারকে সামঞ্জস্য করতে এবং মানিয়ে নিতে পারে।

এটি খুব কঠিন নয়, সে সম্পর্কে কিছু ডকুমেন্টেশন পড়ুন । এটি আপনার অনেক সময় সাশ্রয় করবে।

আইওএস 6 এ সম্পর্কে নতুন বৈশিষ্ট্যও সরবরাহ করে। অ্যাপল বিকাশকারী ওয়েবসাইটে আইওএস 6 এপিআই চেঞ্জলগটি
নিশ্চিত করে পড়ুন । এবং নতুন আইওএস 6 অটোলআউট ক্ষমতা পরীক্ষা করে দেখুন ।

এটি বলেছিল, আপনার যদি সত্যিই আইফোন 5 সনাক্ত করতে হবে তবে আপনি কেবল পর্দার আকারের উপর নির্ভর করতে পারেন ।

[ [ UIScreen mainScreen ] bounds ].size.height

আইফোন 5 এর স্ক্রিনটির উচ্চতা 568 রয়েছে। এগুলি
সরল করতে আপনি কোনও ম্যাক্রো কল্পনা করতে পারেন:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

fabsH2CO3- এর মন্তব্যে নির্দেশিত হিসাবে ভাসমান পয়েন্টগুলির সাথে তুলনা করার সময়, যথাযথ ত্রুটিগুলি রোধ করার জন্য এপসিলনের সাথে ব্যবহার এখানে রয়েছে।

সুতরাং এখন থেকে আপনি স্ট্যান্ডার্ড ব্যবহার করতে পারেন যদি / অন্য বিবৃতি:

if( IS_IPHONE_5 )
{}
else
{}

সম্পাদনা করুন - ভাল সনাক্তকরণ

কিছু লোকের বক্তব্য অনুসারে, এটি কেবল একটি ওয়াইডস্ক্রিন সনাক্ত করে , আসল আইফোন 5 নয়।

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

আসল ম্যাক্রোর নতুন নামকরণ করা যাক IS_WIDESCREEN:

#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

এবং আসুন মডেল সনাক্তকরণ ম্যাক্রোগুলি যুক্ত করুন:

#define IS_IPHONE ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] )
#define IS_IPOD   ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )

এইভাবে, আমরা নিশ্চিত করতে পারি যে আমাদের কাছে একটি আইফোন মডেল এবং প্রশস্ত স্ক্রিন রয়েছে এবং আমরা IS_IPHONE_5ম্যাক্রোর নতুন সংজ্ঞা দিতে পারি :

#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )

এছাড়াও মনে রাখবেন যে @ লার্নো কোকোস 2 ডি-এর বক্তব্য অনুসারে, আইফোন 5 স্ক্রিনের জন্য অ্যাপ্লিকেশনটি অপ্টিমাইজ করা না হলে (ডিফল্ট-568h@2x.png চিত্র অনুপস্থিত) এই ম্যাক্রোগুলি কাজ করবে না, কারণ এর মধ্যে পর্দার আকার 320x480 হবে একটি মামলা.

আমি মনে করি না এটি একটি সমস্যা হতে পারে, কারণ আমি দেখতে পাই না যে আমরা কেন একটি অপ্টিমাইটিজড অ্যাপ্লিকেশনটিতে আইফোন 5 সনাক্ত করতে চাই।

গুরুত্বপূর্ণ - আইওএস 8 সমর্থন

আইওএস 8-এ, শ্রেণীর boundsসম্পত্তি UIScreenএখন ডিভাইস অভিযোজন প্রতিফলিত করে ।
স্পষ্টতই, পূর্ববর্তী কোডটি বাক্সটির বাইরে কাজ করবে না।

এটি ঠিক করার জন্য, আপনি কেবল নতুন nativeBoundsসম্পত্তিটি পরিবর্তে ব্যবহার করতে পারেন bounds, কারণ এটি অভিমুখীকরণের সাথে পরিবর্তিত হবে না এবং এটি কোনও প্রতিকৃতি-মোডের উপর ভিত্তি করে।
নোট করুন যে মাত্রাগুলি nativeBoundsপিক্সেল পরিমাপ করা হয়, সুতরাং একটি আইফোন 5 এর জন্য উচ্চতা 568 এর পরিবর্তে 1136 হবে।

আপনি যদি আইওএস 7 বা তারও কম লক্ষ্যবস্তু হন তবে বৈশিষ্ট্য শনাক্তকরণটি ব্যবহারের বিষয়ে নিশ্চিত হন, যেমন nativeBoundsআইওএস 8 এর পূর্বে কল করা আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করবে:

if( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] )
{
    /* Detect using nativeBounds - iOS 8 and greater */
}
else
{
    /* Detect using bounds - iOS 7 and lower */
}

আপনি নিম্নলিখিত ম্যাক্রোগুলি নিম্নলিখিত উপায়ে মানিয়ে নিতে পারেন:

#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )
#define IS_WIDESCREEN      ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_WIDESCREEN_IOS8 : IS_WIDESCREEN_IOS7 )

এবং স্পষ্টতই, যদি আপনার কোনও আইফোন 6 বা 6 প্লাস সনাক্ত করতে হয় তবে সংশ্লিষ্ট পর্দার আকার ব্যবহার করুন।


7
এটি ভুল, আপনাকে ব্যবহার করতে হবে#define IS_IPHONE_5 ( [ [ UIScreen mainScreen ] bounds ].size.height == 568 )
ফ্যাবিয়ান ক্রেইজার

28
@ এইচ 2 সি 3: নোট করুন যে তুলনাটি DBL_EPSILONএখানে প্রয়োজনীয় নয় এবং ==তুলনাটি ব্যর্থ হবে না : ভাসমান পয়েন্টের মানটি যদি সঠিক সংখ্যা হিসাবে প্রকাশ করা না যায় ( 1.0/3.0*3.0উদাহরণস্বরূপ) তবে এইভাবে পার্থক্যগুলি ব্যবহার করে তুলনা করা প্রয়োজনীয় । আরও তথ্যের জন্য এই নিবন্ধটি পড়ুন ;)
AliSoftware

2
এই উত্তরটি সঠিক নয়। কেন এটি এত থাম্বস আপ হয়েছে? আপনি প্রশস্ত স্ক্রিন কিনা তা নির্ধারণ করতে আপনি কেবল উচ্চতা ব্যবহার করতে পারবেন না।
বউ

5
আমি যুক্ত করতে পারি: আপনি যদি সিমুলেটারের সাথে এটি কাজ করতে চান তবে এটি ব্যবহার করুন: # নির্ধারণকারী আইএস_আইপিএইচোন (([[[ইউআইডি ডিভাইস কারেন্ট ডিভাইস] মডেল]] ইকুয়ালটিস্ট্রিং: @ "আইফোন"]) || @ "আইফোন সিমুলেটর"]))
ডেভিড

31
এই উত্তর পাগলামি। এই বিশেষ ধরণের ফ্লোটের তুলনা না করার পরামর্শ দেওয়ার বিষয়ে এই জিনিসগুলি (যা বাস্তবে হ'ল - এবং যদি আপনি জানেন অ্যাপল জানতে হবে যে সর্বদা হবে - পূর্ণসংখ্যা হবে) == এর সাথে বাজে কথা এবং অতিরিক্ত বিষয়গুলি জটিল করে তোলে। এছাড়াও, আমি মনে করি আইফোন সনাক্তকরণের জন্য UI_USER_INTERFACE_IDIOM () ব্যবহার করা ভাল as কারণ এটি ডিভাইস এবং সিমুলেটার উভয় ক্ষেত্রেই দুর্দান্ত কাজ করে (এবং এটি ইউআইডিভাইস পদ্ধতির চেয়ে দ্রুততরও হতে পারে)। এটি কেবল সূক্ষ্মভাবে কাজ করে এবং পড়ার উপায়টি সহজ: # ডিভাইস IS_IPHONE5 (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPhone && [ইউআইস্ক্রিন মেনস্ক্রিন] .bounds.size.height == 568)
রিকার্ডো সানচেজ-সায়েজ

232

এসডিকে এবং ওএসের যে কোনও সংমিশ্রনের জন্য পরীক্ষিত এবং ডিজাইন করা:

দ্রুতগতি

আইপ্যাড প্রকারের যোগ করা হয়েছে। আইপ্যাড 2 এবং আইপ্যাড মিনি হ'ল রেটিনা আইপ্যাড। যদিও আইপ্যাড মিনি 2 & উপরে, আইপ্যাড 3, 4, আইপ্যাড এয়ার, এয়ার 2, এয়ার 3, ও iPad প্রো 9.7 1024. আইপ্যাড প্রো একই যৌক্তিক রেজল্যুশন আছে 1366. এর MAXLENGTH হয়েছে রেফারেন্স

import UIKit

public enum DisplayType {
    case unknown
    case iphone4
    case iphone5
    case iphone6
    case iphone6plus
    case iPadNonRetina
    case iPad
    case iPadProBig
    static let iphone7 = iphone6
    static let iphone7plus = iphone6plus
}

public final class Display {
    class var width:CGFloat { return UIScreen.main.bounds.size.width }
    class var height:CGFloat { return UIScreen.main.bounds.size.height }
    class var maxLength:CGFloat { return max(width, height) }
    class var minLength:CGFloat { return min(width, height) }
    class var zoomed:Bool { return UIScreen.main.nativeScale >= UIScreen.main.scale }
    class var retina:Bool { return UIScreen.main.scale >= 2.0 }
    class var phone:Bool { return UIDevice.current.userInterfaceIdiom == .phone }
    class var pad:Bool { return UIDevice.current.userInterfaceIdiom == .pad }
    class var carplay:Bool { return UIDevice.current.userInterfaceIdiom == .carPlay }
    class var tv:Bool { return UIDevice.current.userInterfaceIdiom == .tv }
    class var typeIsLike:DisplayType {
        if phone && maxLength < 568 {
            return .iphone4
        }
        else if phone && maxLength == 568 {
                return .iphone5
        }
        else if phone && maxLength == 667 {
            return .iphone6
        }
        else if phone && maxLength == 736 {
            return .iphone6plus
        }
        else if pad && !retina {
            return .iPadNonRetina
        }
        else if pad && retina && maxLength == 1024 {
            return .iPad
        }
        else if pad && maxLength == 1366 {
            return .iPadProBig
        }
        return .unknown
    }
}

এটি কর্মে দেখুন https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346

দ্রষ্টব্য: উদাহরণস্বরূপ, যদি আইফোন 6 জুমড মোডে থাকে তবে ইউআইটি আইফোন 5 এর একটি জুমড সংস্করণ functions

উদ্দেশ্য গ

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_ZOOMED (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

ব্যবহার: http://pastie.org/9687735

দ্রষ্টব্য: উদাহরণস্বরূপ, যদি আইফোন 6 জুমড মোডে থাকে তবে ইউআইটি আইফোন 5 এর একটি জুমড সংস্করণ functions


1
নতুন 5 ডিফল্ট চিত্র ছাড়াই আইফোন 5 নিয়মিত 480x320 স্ক্রিন আকারের প্রতিবেদন করবে। আমার কাছে এটি হ'ল আচরণ wanted
hfossli

3
সম্ভবত একটি দরকারী সংযোজন #define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)যা আইফোন 4 এবং আইফোন 5 এবং আইপ্যাড রেটিনা এবং নন-রেটিনা উভয়ের মধ্যে পার্থক্য নির্ধারণে সহায়তা করবে
bshirley

1
আমি একমত নই আমি মনে করি 'ওয়াইডস্ক্রিন'-টার্মিনোলজিটি দ্রুত পুরানো হওয়ার সাথে সাথে ছেড়ে দেওয়া উচিত।
hfossli

1
@ ডিভোল এইভাবে আইওএস 8 আচরণ করে। SCREEN_MAX_LENGTHআইফোন 5 এ সমস্ত
ঘোরাঘুরিতে

1
@MattParkins আমি আরো জোরালো মডেল চেক ব্যবহার সুপারিশ করবে stackoverflow.com/questions/13366976/...
hfossli

69

সত্যিই সহজ সমাধান

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

1
হাহা সংক্ষিপ্ত এবং সরল, একই কাজ করেছেন: ওভারহেড কম রাখার জন্য আপ! ম্যাক্রোতে স্টাফ রাখা কোনও চ্যালেঞ্জ নয় ...
benjamin.ludwig

2
ম্যাক্রো বা ফাংশনগুলিতে জিনিস না
রাখাই ডিআরওয়াই

হ্যাঁ, তবে উপরে বর্ণিত ম্যাক্রোটিকে সংজ্ঞায়িত করা আরও সুবিধাজনক এবং সহজ, আপনি যদি প্রতি বার ... এটি লেখার পেস্ট করার প্রয়োজন হয় না।
রেস্ট মের

ধন্যবাদ, আপনি আমার জীবন বাঁচিয়েছেন: ডি, তবে আমি জানি না কেন ম্যাক্রো: # ডিফাইন IS_IPHONE_5 (IS_IPHONE && [[ইউআইস্ক্রিন মেনস্ক্রিন] সীমানা] .size.height == 568.0) ==> সিমুলেটর আইওএস 7.1 এ কাজ করছে না, এর আগে যা আমি এখনও এক্সকোড ৪.6 এ কাজ করছি। ওএমজি আইওএস 7.1 এবং এক্সকোড 5
লিনহ এনগুইন

আইফোন 6 এবং 6 প্লাস স্ক্রিন আকারের জন্য অ্যাকাউন্টের নীচে আপডেট উত্তর
স্যাম বি

28

আমাদের এখন আইফোন 6 এবং 6 প্লাস স্ক্রিন আকারের জন্য অ্যাকাউন্ট করতে হবে। এখানে একটি আপডেট উত্তর

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    //its iPhone. Find out which one?

    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    else if(result.height == 568)
    {
        // iPhone 5
    }
    else if(result.height == 667)
    {
        // iPhone 6
    }
   else if(result.height == 736)
    {
        // iPhone 6 Plus
    }
}
else
{
     //its iPad
}

কিছু দরকারী তথ্য

iPhone 6 Plus   736x414 points  2208x1242 pixels    3x scale    1920x1080 physical pixels   401 physical ppi    5.5"
iPhone 6        667x375 points  1334x750 pixels     2x scale    1334x750 physical pixels    326 physical ppi    4.7"
iPhone 5        568x320 points  1136x640 pixels     2x scale    1136x640 physical pixels    326 physical ppi    4.0"
iPhone 4        480x320 points  960x640 pixels      2x scale    960x640 physical pixels     326 physical ppi    3.5"
iPhone 3GS      480x320 points  480x320 pixels      1x scale    480x320 physical pixels     163 physical ppi    3.5"

এটি কেবল আমার পক্ষে কাজ করছে না আইফোন 5 ঠিক করেছে যেহেতু 4 আইফোন 6+ ঠিক সিদ্ধান্ত নেয়নি ওহ আমি পেয়েছি যে আমি ল্যান্ডস্কেপে আছি আমার প্রস্থের সাথে উচ্চতা পরিবর্তন করা উচিত :)
কোল্ডস্টিল

যদি আপনার অ্যাপ্লিকেশন ল্যান্ডস্কেপ মোডে থাকে তবে নিশ্চিত করুন যে আপনি রেজাল্ট.উইটে ফলাফল.উইথ-এ পরিবর্তন করেছেন
স্যাম বি

হুম .. আইফোন 4 এ (আইওএস 6.0) এটি
বদলেনি

ঠিক আছে, আমি ভিউটি কেবলমাত্র iOS 8 এবং এর চেয়েও বেশি
কোল্ডস্টিল

আইফোন 6 উচ্চতা দিচ্ছে = 568
ম্যাক্সো

15

আমি একটি সি ফাংশন মধ্যে Macmade দ্বারা ম্যাক্রো করা, এবং এটি সঠিকভাবে নাম, কারণ এটি সনাক্ত করে স্বাধীনতা গ্রহণ করেছি ওয়াইডস্ক্রিন প্রাপ্যতা এবং না অগত্যা আইফোন 5।

প্রকল্পটিতে Default-568h@2x.png অন্তর্ভুক্ত না হয় এমন ক্ষেত্রে ম্যাক্রো আইফোন 5 তে চালানো সনাক্ত করতে পারে না । নতুন ডিফল্ট চিত্র না থাকলে আইফোন 5 নিয়মিত 480x320 স্ক্রিন আকারের (পয়েন্টগুলিতে) প্রতিবেদন করবে। সুতরাং চেকটি কেবল ওয়াইডস্ক্রিনের উপলভ্যতার জন্য নয় তবে প্রশস্ত স্ক্রিন মোডটি সক্ষম করার জন্য ।

BOOL isWidescreenEnabled()
{
    return (BOOL)(fabs((double)[UIScreen mainScreen].bounds.size.height - 
                                               (double)568) < DBL_EPSILON);
}

পারফরম্যান্সের কারণে আমি এখনও ম্যাক্রোগুলি পছন্দ করি। আমার উত্তরের সম্পাদনা দেখুন। এটি মডেলটিও পরীক্ষা করে।
ম্যাকমেড

1
আপনি ঠিক বলেছেন যে আইফোন 5 নতুন ডিফল্ট চিত্র ছাড়াই নিয়মিত 480x320 স্ক্রিন আকারের প্রতিবেদন করবে। তবে আমি মনে করি একটি অপ্রচলিত অ্যাপে আইফোন 5 সনাক্ত করার কোনও অর্থ নেই ing :)
ম্যাকমেড

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

4
পারফরম্যান্স সম্পর্কিত প্রশ্ন হ'ল আপনি কেন আপনার রেন্ডার লুপের সময় কয়েক হাজার বার এই চেকটি চালাবেন? অন্যথায়, কর্মক্ষমতা একটি ইস্যু এবং স্পষ্টতা এবং বৃহত্তর গুরুত্বের পার্শ্ব প্রতিক্রিয়া এড়ানো।
শিখুন কোকোস

আমি আপনাকে এটির জন্য একটি +1 দিয়েছি কারণ আমি ম্যাক্রোর চেয়ে পৃথক ফাংশনটি পছন্দ করি তবে আমাকে উল্লেখ করতে হবে যে এটি সত্যই সঠিক বা সম্পূর্ণ নয়। ওয়াইডস্ক্রিন সনাক্ত করতে, পর্দার উচ্চতাটি দেখুন না । পরিবর্তে, অনুপাতের অনুপাতটি দেখুন এবং যদি অনুপাতের অনুপাতটি 16: 9 এর চেয়ে বেশি বা সমান হয় তবেই সত্যটি প্রত্যাবর্তন করুন।
টড লেহম্যান

11

এখানে আমাদের কোডগুলি রয়েছে, আইফোন 4, আইফোন 5, আইপ্যাড, আইফোন 6, আইফোন 6 পি এর জন্য আইওএস 7 / আইওএস 8 এ পরীক্ষা পাস হয়েছে, ডিভাইস বা সিমুলেটারের কোনও বিষয় নেই:

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) // iPhone and       iPod touch style UI

#define IS_IPHONE_5_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
#define IS_IPHONE_6_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0f)
#define IS_IPHONE_6P_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0f)
#define IS_IPHONE_4_AND_OLDER_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height < 568.0f)

#define IS_IPHONE_5_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) == 568.0f)
#define IS_IPHONE_6_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) == 667.0f)
#define IS_IPHONE_6P_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) == 736.0f)
#define IS_IPHONE_4_AND_OLDER_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) < 568.0f)

#define IS_IPHONE_5 ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_IPHONE_5_IOS8 : IS_IPHONE_5_IOS7 )
#define IS_IPHONE_6 ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_IPHONE_6_IOS8 : IS_IPHONE_6_IOS7 )
#define IS_IPHONE_6P ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_IPHONE_6P_IOS8 : IS_IPHONE_6P_IOS7 )
#define IS_IPHONE_4_AND_OLDER ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_IPHONE_4_AND_OLDER_IOS8 : IS_IPHONE_4_AND_OLDER_IOS7 )

আমি একটি আইফোন 6 পি পরীক্ষা করছি এবং আমার বিবৃতি যদি IS_IPHONE_5 অবস্থায় পড়ে যাচ্ছে? এটি কীভাবে হতে পারে, আপনার কোডটি ভাল দেখাচ্ছে? আমি একটি সরল অনুলিপি এবং একটি সরল সাথে পেস্ট করেছি যদি / অন্যথায় এবং আমি জানি যে আমার ফোনটি একটি 6 প্লাস চালিত আইওএস 8.3 is
জোজ

7

আমি এইচফসলির উত্তরটি ব্যবহার করেছি এবং এটি সুইফটে অনুবাদ করেছি

let IS_IPAD = UIDevice.currentDevice().userInterfaceIdiom == .Pad
let IS_IPHONE = UIDevice.currentDevice().userInterfaceIdiom == .Phone
let IS_RETINA = UIScreen.mainScreen().scale >= 2.0

let SCREEN_WIDTH = UIScreen.mainScreen().bounds.size.width
let SCREEN_HEIGHT = UIScreen.mainScreen().bounds.size.height
let SCREEN_MAX_LENGTH = max(SCREEN_WIDTH, SCREEN_HEIGHT)
let SCREEN_MIN_LENGTH = min(SCREEN_WIDTH, SCREEN_HEIGHT)

let IS_IPHONE_4_OR_LESS = (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
let IS_IPHONE_5 = (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
let IS_IPHONE_6 = (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
let IS_IPHONE_6P = (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

6

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

#define WIDTH_IPAD 1024
#define WIDTH_IPHONE_5 568
#define WIDTH_IPHONE_4 480
#define HEIGHT_IPAD 768
#define HEIGHT_IPHONE 320

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

//width is height!
#define IS_IPHONE_5 ( [ [ UIScreen mainScreen ] bounds ].size.height == WIDTH_IPHONE_5 )
#define IS_IPHONE_4 ( [ [ UIScreen mainScreen ] bounds ].size.height == WIDTH_IPHONE_4 )

#define cp_ph4(__X__, __Y__) ccp(cx_ph4(__X__), cy_ph4(__Y__))
#define cx_ph4(__X__) (IS_IPAD ? (__X__ * WIDTH_IPAD / WIDTH_IPHONE_4) : (IS_IPHONE_5 ? (__X__ * WIDTH_IPHONE_5 / WIDTH_IPHONE_4) : (__X__)))
#define cy_ph4(__Y__) (IS_IPAD ? (__Y__ * HEIGHT_IPAD / HEIGHT_IPHONE) : (__Y__))

#define cp_pad(__X__, __Y__) ccp(cx_pad(__X__), cy_pad(__Y__))
#define cx_pad(__X__) (IS_IPAD ? (__X__) : (IS_IPHONE_5 ? (__X__ * WIDTH_IPHONE_5 / WIDTH_IPAD) : (__X__ * WIDTH_IPHONE_4 / WIDTH_IPAD)))
#define cy_pad(__Y__) (IS_IPAD ? (__Y__) : (__Y__ * HEIGHT_IPHONE / HEIGHT_IPAD))


3

সুইফটে, আইওএস 8+ প্রজেক্টটি আমি একটি এক্সটেনশন তৈরি করতে UIScreenচাই, যেমন:

extension UIScreen {

    var isPhone4: Bool {
        return self.nativeBounds.size.height == 960;
    }

    var isPhone5: Bool {
        return self.nativeBounds.size.height == 1136;
    }

    var isPhone6: Bool {
        return self.nativeBounds.size.height == 1334;
    }

    var isPhone6Plus: Bool {
        return self.nativeBounds.size.height == 2208;
    }

}

(দ্রষ্টব্য: nativeBoundsপিক্সেলগুলিতে রয়েছে)।

এবং তারপরে কোডটি এর মতো হবে:

if UIScreen.mainScreen().isPhone4 {
    // do smth on the smallest screen
}

সুতরাং কোডটি পরিষ্কার করে দিয়েছে যে এটি ডিভাইসের মডেলের জন্য নয়, মূল পর্দার জন্য একটি চেক।


2

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

#define SCREEN_SIZE_IPHONE_CLASSIC 3.5
#define SCREEN_SIZE_IPHONE_TALL 4.0
#define SCREEN_SIZE_IPAD_CLASSIC 9.7

+ (CGFloat)screenPhysicalSize
{
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height < 500)
            return SCREEN_SIZE_IPHONE_CLASSIC;  // iPhone 4S / 4th Gen iPod Touch or earlier
        else
            return SCREEN_SIZE_IPHONE_TALL;  // iPhone 5
    }
    else
    {
        return SCREEN_SIZE_IPAD_CLASSIC; // iPad
    }
} 

আইপ্যাড মিনিটির জন্য পুনর্বিবেচনার প্রয়োজন যা আমি বিশ্বাস করি না আপনি এই ম্যানোরটি নির্ধারণ করতে সক্ষম হবেন।
ড্যানিয়েল

হ্যাঁ, আইপ্যাড মিনিতে আইপ্যাড 2 এর সমান রেজোলিউশন রয়েছে, সুতরাং এই পদ্ধতিটি সেটির জন্য কার্যকর হয় না। কীভাবে এখনই এই মামলাটি পরিচালনা করবেন তা নিশ্চিত নয় ...
জেফ হেই

1
আপনার থাকার কথা নয় আপনি "আইপ্যাড ২,৫" কেনার জন্য ডিভাইস সনাক্তকারীকেও পরীক্ষা করতে পারেন আপনার 2,6 এবং 2,7 - ওয়াইফাই কেবল সংস্করণ, জিএসএম এবং সিডিএমএ যাচাই করতে হবে। তবে এর অর্থ হ'ল পরবর্তী আইপ্যাড মিনি প্রকাশিত হবে এবং আপনাকে সেই পরিচয়কারীদের কাছে হার্ড কোডে আপডেট করতে হবে যা আপনি নিজের হাতে আগে জানতে পারবেন না। আপনি যখন কোনও আইপ্যাড মিনিতে
ড্যানিয়েল

2

আমি মনে করি এটি ভাল হওয়া উচিত যদি এই ম্যাক্রো ডিভাইস এবং সিমুলেটারে কাজ করবে, নীচে সমাধানটি দেওয়া হচ্ছে।

#define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
#define IS_IPHONE (([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"]) || ([[[UIDevice currentDevice] model] isEqualToString: @"iPhone Simulator"]))
#define IS_IPOD   ([[[UIDevice currentDevice]model] isEqualToString:@"iPod touch"])
#define IS_IPHONE_5 ((IS_IPHONE || IS_IPOD) && IS_WIDESCREEN)

2

আমি দেখেছি যে উত্তরগুলিতে সিমুলেটারগুলির জন্য একটি বিশেষ কেস অন্তর্ভুক্ত নয়।

#define IS_WIDESCREEN ( [ [ UIScreen mainScreen ] bounds ].size.height == 568  )
#define IS_IPHONE ([[ [ UIDevice currentDevice ] model ] rangeOfString:@"iPhone"].location != NSNotFound)
#define IS_IPAD ([[ [ UIDevice currentDevice ] model ] rangeOfString:@"iPad"].location != NSNotFound)
#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )

2
+(BOOL)isDeviceiPhone5
{
    BOOL iPhone5 = FALSE;

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    if (screenBounds.size.height == 568)
    {
        // code for 4-inch screen
        iPhone5 = TRUE;
    }
    else
    {
        iPhone5 = FALSE;
        // code for 3.5-inch screen
    }
    return iPhone5;

}

iPhone5 = FALSE;অপ্রয়োজনীয় কারণ পরিবর্তনটি পরিবর্তন না করা থাকলে ইতিমধ্যে ভেরিয়েবলের সেই মানটি রয়েছে
এমকন্ট


1

আকারে নির্ভর করা এতগুলি স্তরে ভুল। কিভাবে আমরা সিস্টেম জিজ্ঞাসা?

- (NSString *) getDeviceModel
{
    struct utsname systemInfo;
    uname(&systemInfo);
    return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}

হার্ডওয়্যার ধরণ, আইফোন 4 বা আইফোন 5 সনাক্ত করার সেরা উপায় থেকে নেওয়া হয়েছে ? , edzio27 উত্তর।


1

এইভাবে আপনি ডিভাইস পরিবার সনাক্ত করতে পারেন।

    #import <sys/utsname.h>
    NSString* deviceName()
    {
        struct utsname systemInformation;
        uname(&systemInformation);
        NSString *result = [NSString stringWithCString:systemInformation.machine
                                              encoding:NSUTF8StringEncoding];
        return result;
    }

    #define isIPhone5  [deviceName() rangeOfString:@"iPhone5,"].location != NSNotFound
    #define isIPhone5S [deviceName() rangeOfString:@"iPhone6,"].location != NSNotFound

1

যদি প্রকল্পটি Xcode 6 ব্যবহার করে তৈরি করা হয়, তবে ডিভাইসগুলি সনাক্ত করতে নীচে উল্লিখিত কোডটি ব্যবহার করুন ..

printf("\nDetected Resolution : %d x %d\n\n",(int)[[UIScreen mainScreen] nativeBounds].size.width,(int)[[UIScreen mainScreen] nativeBounds].size.height);

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
    {
        if([[UIScreen mainScreen] nativeBounds].size.height == 960 || [[UIScreen mainScreen] nativeBounds].size.height == 480){
            printf("Device Type : iPhone 4,4s ");

        }else if([[UIScreen mainScreen] nativeBounds].size.height == 1136){
            printf("Device Type : iPhone 5,5S/iPod 5 ");

        }else if([[UIScreen mainScreen] nativeBounds].size.height == 1334){
            printf("Device Type : iPhone 6 ");

        }else if([[UIScreen mainScreen] nativeBounds].size.height == 2208){
            printf("Device Type : iPhone 6+ ");

        }
    }
}else{
    printf("Device Type : iPad");
}

যদি প্রকল্পটি Xcode 5 এ তৈরি করা হয়েছিল এবং এক্সকোড 6 এ খোলা হয়েছে, তবে ডিভাইসগুলি সনাক্ত করতে নীচে উল্লিখিত কোডটি ব্যবহার করুন (

printf("\nDetected Resolution : %d x %d\n\n",(int)[[UIScreen mainScreen] nativeBounds].size.width,(int)[[UIScreen mainScreen] nativeBounds].size.height);
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
    {
       if([[UIScreen mainScreen] nativeBounds].size.height == 960 || [[UIScreen mainScreen] nativeBounds].size.height == 480){
            printf("Device Type : iPhone 4,4s");
            appType=1;
        }else if([[UIScreen mainScreen] nativeBounds].size.height == 1136 || [[UIScreen mainScreen] nativeBounds].size.height == 1704){
            printf("Device Type : iPhone 5,5S,6,6S/iPod 5 ");
            appType=3;
        }
    }
}else{
    printf("Device Type : iPad");
    appType=2;
}

আপনি যদি এখনও একসাথে এক্সকোড 5 ব্যবহার করে থাকেন তবে ডিভাইসগুলি সনাক্ত করতে নিম্নলিখিত কোডটি ব্যবহার করুন (আইফোন 6 এবং 6+ সনাক্ত করা যাবে না)

printf("\nDetected Resolution : %d x %d\n\n",(int)[[UIScreen mainScreen] bounds].size.width,(int)[[UIScreen mainScreen] bounds].size.height);
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
    {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width * scale, result.height * scale);
        if(result.height == 960 || result.height == 480){
            printf("Device Type : iPhone 4,4S ");

        }else if(result.height == 1136){
            printf("Device Type : iPhone 5s/iPod 5");

        }
    }
}else{
    printf("Device Type : iPad");

}

1
  1. একটি 'নতুন সুইফ্ট ফাইল' -> যুক্ত করুন AppDelegateEx.swift

  2. এতে একটি এক্সটেনশন যুক্ত করুন AppDelegate

    import UIKit
    extension AppDelegate {
         class func isIPhone5 () -> Bool{
             return max(UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height) == 568.0
        }
        class func isIPhone6 () -> Bool {
            return max(UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height) == 667.0
        }
        class func isIPhone6Plus () -> Bool {
            return max(UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height) == 736.0
        }  
    }
  3. ব্যবহার:

        if AppDelegate.isIPhone5() {
            collectionViewTopConstraint.constant = 2
        }else if AppDelegate.isIPhone6() {
            collectionViewTopConstraint.constant = 20
        }

1

সুইফ্ট 3 এ আপনি আমার সাধারণ শ্রেণীর কেআরডিভাইসটাইপ ব্যবহার করতে পারেন।

https://github.com/ulian-onua/KRDeviceType

এটি অপারেটরগুলিকে ==,> =, <= ভাল ডকুমেন্টেড এবং সমর্থন করে।

উদাহরণস্বরূপ ডিভাইসের আইফোন 6 / 6s / 7 এর সীমা রয়েছে কিনা তা সনাক্ত করতে আপনি কেবল পরবর্তী তুলনাটি ব্যবহার করতে পারেন:

if KRDeviceType() == .iPhone6 {
// Perform appropiate operations
}

ডিভাইসের আইফোন 5 / 5S / SE বা তার আগের (আইফোন 4s) এর সীমা রয়েছে কিনা তা সনাক্ত করতে আপনি পরবর্তী তুলনাটি ব্যবহার করতে পারেন:

if KRDeviceType() <= .iPhone5 {   //iPhone 5/5s/SE of iPhone 4s
// Perform appropiate operations (for example, set up constraints for those old devices)
}

1

এটি একশবার উত্তর দেওয়া হয়েছে তবে নতুন সমাধানগুলি চালু করার সময় আমার সমাধানটি এই সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে এবং সমস্যাটির সমাধান করতে সহায়তা করেছে I

সুইফ্ট 5 সহায়ক:

extension UIScreen {
    func phoneSizeInInches() -> CGFloat {
        switch (self.nativeBounds.size.height) {
        case 960, 480:
            return 3.5  //iPhone 4
        case 1136:
            return 4    //iPhone 5
        case 1334:
            return 4.7  //iPhone 6
        case 2208:
            return 5.5  //iPhone 6 Plus
        case 2436:
            return 5.8  //iPhone X
        case 1792:
            return 5.5  //iPhone XR
        case 2688:
            return 6.5  //iPhone XS Max
        default:
            let scale = self.scale
            let ppi = scale * 163
            let width = self.bounds.size.width * scale
            let height = self.bounds.size.height * scale
            let horizontal = width / ppi, vertical = height / ppi
            let diagonal = sqrt(pow(horizontal, 2) + pow(vertical, 2))
            return diagonal
        }
    }
}

এর কারণ এটি একটি ফোনের ইঞ্চি আকারগুলি যেমন "5.5 ইঞ্চি" বা "4.7 ইঞ্চি" ডিভাইসটি মুখস্থ করা সহজ তবে সঠিক পিক্সেলের আকারগুলি মনে রাখা শক্ত।

if UIScreen.main.phoneSizeInInches() == 4 {
  //do something with only 4 inch iPhones
}

এটি আপনাকে এরকম কিছু করার সুযোগ দেয়:

if UIScreen.main.phoneSizeInInches() < 5.5 {
  //do something all iPhones smaller than the plus
}

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


0

নিম্নলিখিত কোড ব্যবহার করুন:

CGFloat screenScale = [[UIScreen mainScreen] scale];

CGRect screenBounds = [[UIScreen mainScreen] bounds]; 

CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale); 

if (screenSize.height==1136.000000)
{ 
    // Here iPhone 5 View

    // Eg: Nextview~iPhone5.Xib
} else {
   // Previous Phones 

   // Eg : Nextview.xib
}

0

অভিমুখের উপর নির্ভর করে ডিভাইসের সঠিক পরীক্ষাটি এখানে

- (BOOL)isIPhone5
{
    CGSize size = [[UIScreen mainScreen] bounds].size;
    if (MIN(size.width,size.height) == 320 && MAX(size.width,size.height == 568)) {
        return YES;
    }
    return NO;
}

-2

আইফোন এবং আইপ্যাডের সমস্ত ডিভাইস ডিভাইস সনাক্ত করতে ব্যবহৃত।

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0) 

আইফোন 6 এর কোনও রেটিনা ডিসপ্লে নেই?
ভাইকিংগুন্ডো

আইফোন 6 এর রতিনা (@ 2 এক্স) ডিসপ্লে রয়েছে। এবং আইফোন 6 প্লাসে এইচডি (@ 3 এক্স) ডিসপ্লে রয়েছে।
বৈভব শর্মা

সুতরাং যদি IS_RETINAআইফোন 6 প্লাসের জন্য পরীক্ষা করা হয় তবে 1x কোডটি কার্যকর করা হবে?
ভাইকিংগুন্ডো

এই লিঙ্কটি দেখুন। stackoverflow.com/questions/25756589/…
বৈভব শর্মা

1
আপনি এটি পান না: আপনার নিয়মগুলি ফল দেবে @1x, যেখানে এটি পাওয়া উচিত @3x। যাইহোক: আপনি যেমন অনুলিপি এবং অনুলিপি করছেন: -1
ভাইকিংগুন্ডো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.