آیا ما از یک کلاس View controller برای هر دو دستگاه آیفون و آیپد استعمال میکنیم؟ یا این که برای هر مورد از کلاس View controller جدا ای به کار گیری می نماییم؟ به صورت همگانی ، به کار گیری از view controller های غیروابسته برای پلتفرم های متفاوت طراحی اپلیکیشن در مشهد ، معمولی خیس میباشد. چنانچه شل خیس میباشید که View controller ها مانند نمونه تصویر فوق ، یک کدام از باشند ، میتوانید از کلاس view controller واحدی برای هر دو پلتفرم به کار گیری فرمائید. البته بدانید که هندل کردن کدها در آیفون و آیپد متعدد میباشد.
iOS SDK ماکرو UI_USER_INTERFACE_IDIOM را برای ما مهیا می نماید تا مسیرهای کد شرطی برای حفاظت از خصوصیت های خاص دستگاه ها را ساخت کنیم. این ماکرو به ما اذن میدهد که به راحتی نوع دستگاه را انتخاب کنیم. در شرایطی که دستگاه ، یک آیپد باشد ، مقدار رجوع داده گردیده ماکرو ، UIUserInterfaceIdiomPad خواهد بود. در صورتی دستگاه هم آیفون و یا این که آیپد لمسی باشد ، مقدار رجوع و برگشت داده گردیده بوسیله ماکرو UIUserInterfaceIdiomPhone میباشد. عبارت شرطی مبتنی بر کد تحت است:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
// Place iPhone/iPod specific code here...
} else {
// Place iPad-specific code here...
}
بیایید شغل را در درون نمونه دنبال کنیم. پروژه Xcode دربردارنده یک کلاس ViewController است که با view controller هر دو نسخه Storyboard آیفون و آیپد مرتبط میباشد.
آغاز ، یک رابطه “Action” در بین کلید Play و پوشه ViewController.h ساخت و ساز میکنیم. action مشابهی را به برای کلیدهای Play در هر دو نسخه Storyboard ها مرتبط میسازیم.
در پوشه ViewController.m ، اسلوب play: را با کدهای ذیل دستکاری میکنیم:
- (IBAction)play:(id)sender {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
// For iPhone
UIAlertView *playAlert = [[UIAlertView alloc] initWithTitle:@\"New Game\" message:@\"Start Playing...\" delegate:self cancelButtonTitle:@\"OK\" otherButtonTitles:nil, nil];
[playAlert show];
} else {
// For iPad
UIAlertView *playAlert = [[UIAlertView alloc] initWithTitle:@\"Game Over\" message:@\"Just ended...\" delegate:self cancelButtonTitle:@\"OK\" otherButtonTitles:nil, nil];
[playAlert show];
}
}
چیزی که ما اجرا دادیم صرفا اکران دو پیام هشدار متعدد در آیفون و آیپد بود. برنامه را مجدد در مشابه سازی آیفون و آیپد کامپایل و انجام میکنیم. بسته به دستگاه آیتم استعمال ، پیام هشدار مختلفی را اخذ خوا هیم کرد.
نرمافزار demo بسیار معمولی میباشد. ولی ، علامت میدهد زمانی که میخواهیم یک کلاس view controller متداول را به اشتراک بگذاریم ، چهگونه قادر خواهیم بود میان گونه های دستگاه ها تمایز قائل شویم.
ساخت اپلیکیشن Universal با به کار گیری از Interface Builder
بسیار بهتر، تا اینجا اصول توسعه و گسترش اپلیکیشن universal را آموختید. پس از Storyboard ، شاید بخواهید که Interface Builder را برای ساخت و ساز رابط کاربری به کار گیری فرمایید. در این زمینه ، ما دو پوشه nib ساخت خواهیم کرد – یکی از برای آیفون و دیگری برای آیپد. پوشه nib آیپد به صورت متداول با modifier دستگاه “~ipad” نمایش داده می شود.
ما وارد جزئیات کد مرتبط با Interface builder نخواهیم شد. ولی معمولاً ، یک قسمت شرطی ، برای تعیین فولدر nib جهت بار گذاری مطابق نوع دستگاه سرازیر داریم. قطعه کد آیتم استعمال به تفصیل تحت میباشد:
+ (id) loadFromXib {
NSString *xibName = NSStringFromClass(self);
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
xibName = [xibName stringByAppendingString:@\"~ipad\"];
}
return [self loadFromXibNamed:xibName];
}
فعالسازی تصاویر ، آیکون نرمافزار و تصاویر اپلیکیشن
به غیر از دو نسخه از storyboard یا این که Interface builder ، ما بایستی دو نسخه از پوشه های منبع را نیز بسازیم. برای مثال ، در صورتیکه از تصاویر به کار گیری میکنیم ، ممکن میباشد ما یحتاج باشد که نسخه های گرانقدر خیس (یا این که با وضوح فراتر) را برای پناه از دستگاه های آیپد ، اضافه نماییم. برای نگهداری آسانی مطالب ، ما به صورت خلاصه سه نوع پوشه منبع مثلا تصویر launch ، آیکون برنامه و تصاویر آپ را آیتم کنکاش قرار خوا هیم بخشید.
تصاویر فعالسازی
برنامه های universal بایستی تصاویر فعالسازی را برای هر دو نوع دستگاه های آیفون و آیپد مهیا کنند. به صورت معمول ، ما می بایست یک نصویر فعال سازی را در جهت عمودی برای برنامه های آیفون و هم اینگونه نرمافزار های آیپد به کار گیری کنیم.
نرم افزار های آیفون صرفا به یک تصویر در جهت عمودی نیاز داراهستند ، در حالی که نرمافزار های آیپد ، به صورت معمول ، به تصاویر مختلفی در جهت های عمودی و افقی نیاز دارا هستند. به صورت خلاصه ، ما می بایست تصاویر launch تحت را برای نرمافزار Universal آماده کنیم:
تصویر فعالسازی برای آیفون غیر از retina (320 در 480)
تصویر فعالسازی برای آیفون retina 4 , 4S (640 در 960)
تصویر فعال سازی برای آیفون retina 5 (640 در 1136)
تصویر فعال سازی برای آیپد retina (1024 در 768)
تصویر فعال سازی برای آیپد retina (2048 در 1536)
Xcode 5 قابلیت و امکان Asset Catalogs را معرفی می کند که رئیس تصاویر راهاندازی و آیکون آپ ها را بی آلایش می نماید. در نصیب پیکربندی General مرتبط با Target ، بایستی قسمت های App Icons و Launch Images را پیدا کنیم:
روی کلید فلس از Launch Image برای دسترسی به دسته تصاویر launch کلیک میکنیم. گروه تصویر راهاندازی ، دربردارنده آحاد نمایه های تصویر فعالسازی استاتیک است که نرم افزار در حین راهاندازی اکران میدهد. ما به آسانی میتوانیم تصویر را از Finder درگ کرده و آن را به image well مطلوب تهیه و تنظیم کنیم