iphone - ملاحظة - نسخ ملاحظات الايفون




تحويل Storyboard من iPhone إلى iPad (14)

لدي تطبيق iPhone يحتوي على لوحة عمل. الآن أريد توفير تطبيق iPad أيضًا. لذا سألتني ما إذا كانت هناك وظيفة تساعدني في تحويل لوحة العمل على iPhone إلى لوحة القصة على iPad .

لتكون محددة:

هل هناك وظيفة مماثلة أم أن هناك طريقة يدوية فقط؟


مقاربة مختلفة

  1. إضافة وحدة تحكم "عرض-فارغ" مع "وحدة التحكم بالملاحة" في iPad-Storyboard

  2. تغيير فئة إلى فئة من ViewController الأولى المستخدمة في iPhone ، "fooViewController"

  3. إضافة معرّف لوحة العمل - Storyboard في iPhone-Storyboard "fooViewController_storyboard_identifier" لأول ViewController

  4. الذهاب إلى "fooViewController.m"

  5. إضافة bool متغير bool nibWasLoadForIpad=false

  6. الذهاب إلى viewDidLoad

if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && !nibWasLoadForIpad)
{
    nibWasLoadForIpad=true;
    UIStoryboard* Storyboard_iphone=[UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
    fooViewController *controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:@"fooViewController_storyboard_identifier"];
    [self.navigationController pushViewController:controller animated:YES];
    self.modalPresentationStyle = UIModalPresentationCurrentContext;
}

(ملاحظة: المشكلة هي أن خلفيات العرض سيتم ضبطها على الأبيض)


1 - قم "MainStoryboard_iPad.storyboard";

2 - انقر بالزر الأيمن على "MainStoryboard_iPhone.storyboard" و "Open as -> Source Code". نسخ كل شيء

3- انقر بالزر الأيمن على "MainStoryboard_iPad.storyboard" و "Open as -> Source Code". لصق كل شيء. الآن البحث والتغيير:

  • targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
  • type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" to type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"

4 - احفظ. الآن إعادة فتح ولكن باستخدام واجهة بناء. سيكون عليك فقط إعادة الترتيب.

يمكن استخدام هذه الطريقة لملفات .xib أيضًا


إذا كنت قد أنشأت مشروعًا عالميًا ، فبإمكانك افتراضيًا إنشاء لوحة القصة الخاصة بـ iPad ، عليك فقط اختيار لوحة العمل على iPhone وتحديد كل (Command + A) والنسخ (Command + C) ولصقه على لوحة العمل على iPad. تأكد من نقل نقطة الإدخال من لوحة العمل الفارغة إلى لوحة العمل المنسوخة حديثًا قبل التجميع.


إليك شيئًا أنقذني لساعات وربما يساعدك في مهارات بايثون.

أقوم ببناء تطبيق خلال الشهرين الماضيين ، ركز على جهاز iPad فقط الذي يكرر تجربة المستخدم مع الفريق.

ركز اليوم على بناء إصدار iPhone ، ثم اتبع الخطوات المذكورة أعلاه (شكرا!) ولكن لم أكن أرغب بعد ذلك في تغيير حجم جميع عناصر واجهة المستخدم من أبعاد جهاز iPad في محرر لوحة العمل المرئية.

لذلك كتبت هذا البرنامج النصي الصغير python الرقصة للمسح من خلال ملف لوحة العمل من أجل x و y والعرض والارتفاع والقياس لكل شيء بنسبة 320./768. سمح لي بعد ذلك فقط التركيز على التعديلات الدقيقة.

  1. انسخ لوحة العمل على iPad إلى ملف جديد. (على سبيل المثال iPhoneStoryboard.storyboard)

  2. تشغيل البرنامج النصي أدناه مع اسم الملف القصة المصورة المنسوخة كمعلمة الأولى.

  3. سوف تولد ملف الإخراج مع لاحقة _adjusted.storyboard (على سبيل المثال iPhoneStoryboard.storyboard_adjusted.storyboard)

آمل أن يساعد ...

import re
import sys
import math

afile = sys.argv[1]

scale = 320./768.

number_pattern = '[-0-9]+(.[0-9]+)?'
#width_pattern = 'width="[-0-9]+( ?px)?"'
width_pattern = 'width="[-0-9]+(.[0-9]+)?( ?px)?"'
height_pattern = 'height="[-0-9]+(.[0-9]+)?( ?px)?"'
x_pattern = 'x="[-0-9]+(.[0-9]+)?( ?px)?"'
y_pattern = 'y="[-0-9]+(.[0-9]+)?( ?px)?"'


def replacescaledvalue(scale,pattern,sometext,replacefmt) :
    ip = re.search(pattern, sometext, re.IGNORECASE)
    if(ip) :
        np = re.search(number_pattern,ip.group(0))
        if(np) :
            val = float(np.group(0))
            val = int(math.floor(val*scale))
            sval = replacefmt+str(val)+'"'#+'px"'
            newtext = re.sub(pattern,sval,sometext)
            return newtext
    else :
        return sometext

fin = open(afile)
fout = open(afile+"_adjusted.storyboard", "wt")
for line in fin:
    newline = line
    newline = replacescaledvalue(scale,width_pattern,newline,'width="')
    newline = replacescaledvalue(scale,height_pattern,newline, 'height="')
    newline = replacescaledvalue(scale,x_pattern,newline, 'x="')
    newline = replacescaledvalue(scale,y_pattern,newline, 'y="')
#   print newline
    fout.write( newline )

fin.close()
fout.close()

انتقل إلى ملخص الهدف الخاص بك وقم بتغيير الأجهزة إلى عامة ، ثم انزل وقم بتعيين إصدار باد على أي لوحة قصة تريدها ، بما في ذلك نسخة منقولة ومُعاد تسميتها إن شئت.


باستخدام فئات حجم XCode6 لم تعد بحاجة إلى تحويل لوحة العمل إلى iPad. يمكن استخدام نفس لوحة العمل لكل من iPhone و iPad ، مما يوفر عليك حفظ ملفين محدثين.

القصة المصورة الناتجة متوافق مع iOS7 +.

اقرأ المزيد عن هذا هنا: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1

استخدم فئات الحجم لتمكين لوحة العمل أو ملف xib للعمل مع جميع أحجام الشاشة المتاحة. يتيح ذلك واجهة المستخدم لتطبيقك للعمل على أي جهاز iOS.


شكرا على الإجابات الجميع.

لقد اتبعت الخطوات المذكورة أعلاه ولكن عندما أجريت التطبيق تحت المحاكاة أو جهاز iPad ، استمر في استخدام لوحة العمل على iPhone فقط.

لسبب ما ، عندما قمت بتغيير الجهاز المستهدف ليكون Universal بدلاً من iPhone ، لم يقم Xcode (v5.0) بتحديث ملف app-Info.plist لتضمين لوحة القصة الخاصة بـ iPad ، لذلك اضطررت إلى إضافة الإدخال التالي يدويًا ( باستخدام محرر Plist في Xcode):

الاسم الأساسي لملف لوحة القصة الرئيسية (iPad) ==> MainStoryboard_iPad


فقط للمتعة ، على XCode 5.1 و iOS 7.1 أنا أيضا بحاجة إلى تغيير قيم "toolVersion" و "systemVersion" إلى هذا:

toolsVersion="5023" systemVersion="13A603"

بدون هذا ، لن يتم تجميع ملف لوحة العمل الجديد


لقد اتبعت هذا الموضوع عندما أصبت بنفس المشكلة بالأمس. الخطوات التي اتبعتها

  1. بالنسبة لـ Xcode 5.1 ، اضطررت للقيام ببعض تنظيف لوحة العمل على iPhone مثل فقد reuseIdentifiers لخلايا الجدول ، وتوفير معرف لوحة القصة لكل وحدة تحكم ، وإزالة المشاهد غير المستخدمة.
  2. نسخ MainStoryboard_iPhone.storyboard إلى MainStoryboard_iPad.storyboard.
  3. باستخدام محرر vi - تم تغيير targetRuntime="iOS.CocoaTouch" إلى targetRuntime="iOS.CocoaTouch.iPad"
  4. تغيير الرمز في MainStoryboard_iPad.storyboard من: <simulatedScreenMetrics key="destination" type="retina4"/> إلى <simulatedScreenMetrics key="destination"/>
  5. افتح المشروع في Xcode.
  6. تغيير أجهزة النشر إلى Universal - اختر خيار عدم نسخ لوحة العمل لـ iPhone.
  7. سوف Xcode الافتراضي هدف النشر إلى 7.1 ، اعتنى بالوظائف التي تم إيقافها.
  8. لإصلاح خطأ العرض في غير محله في لوحة العمل لـ iPad - تغيير تخطيط الإطار لوحدات التحكم التي تعطي أخطاء.

كان ذلك ... شكرا لكم جميعا على مساعدتكم ..


لقد اكتشفت نوعًا من الحلول:

  1. مكرر آيفون الخاص بك القصة المصورة وإعادة تسميته MainStoryboard_iPad.storyboard

  2. أغلق Xcode ثم افتح هذا الملف أي محرر نصوص.

  3. البحث عن targetRuntime="iOS.CocoaTouch" وتغييره إلى targetRuntime="iOS.CocoaTouch.iPad"

  4. قم بتغيير الرمز في MainStoryboard_iPad.storyboard من:

    <simulatedScreenMetrics key="destination" type="retina4"/> to

    <simulatedScreenMetrics key="destination"/>

  5. الآن حفظ كل شيء وإعادة فتح Xcode. يحتوي iPad-Storyboard على نفس محتويات ملف iPhone ، ولكن يمكن إلغاء ترتيب كل شيء.

هذا حفظ لي ساعات - نأمل أن هذا سوف تساعدك


هذا لم ينجح تماما بالنسبة لي. فعلت شيئًا مختلفًا بعض الشيء.

  1. قم بإنشاء ملف لوحة قصة جديد لإصدار iPad
  2. افتح كل من الملف الجديد والملف الذي أريد نسخه في textwrangler (محرر نصوص)
  3. تم نسخ نص xml من الملف القديم إلى الملف الجديد بين علامات xml هذه
  4. العلامة الأولى <scenes> <!--Contents View Controller-->
  5. لصق هنا
  6. إنهاء العلامات </class> </classes>

هذا العمل بالنسبة لي. حصلت على تخطيط جديد مع جميع منافذاتي المتصلة ، والتي أنقذتني بضع ساعات.


هذا يسير في الاتجاه الآخر ، لكنني تمكنت من القيام باختيار الكل والنسخ في لوحة العمل على iPad (~ 35 مشهدًا) ولصقها في لوحة العمل على iPhone. تم تعديل أحجام المشهد تلقائيًا. رأيت فقط مشكلتين ، واضطررت إلى استبدال UISplitViewController (لأنه فقط باد) ، والخلفية الافتراضية أصبحت شفافة بدلا من الرمادي (لا تزال تعمل على إصلاح ذلك بشكل صحيح ، دون تحديد الخلفية لكل شيء يدويا).

EDIT: يبدو أن الخلفية الافتراضية لـ UITableView في عارض السمات غريبة إلى حد ما. واضطررت إلى تعيين الخلفية يدويًا إلى "لون خلفية عرض جدول المجموعة" لطرق عرض الجدول المجمعة ، و "اللون الأبيض" لطرق عرض الجدول غير المجمعة. ثم تم عرضه على أنه "افتراضي" (أفترض أنه بعد ذلك يطابق قيمة ضمنية). - في الواقع ، حتى أسهل ، يتغير من "مجمعة" إلى "ثابت" والظهر يبدو لإعادة اللون الافتراضي.


هناك حل بسيط جدًا لإصدارات Xcode التي تدعم فئات الحجم (تم اختبارها في Xcode 7 وهي الإصدار الحالي في وقت الكتابة). حدد مربع الاختيار "استخدام فئات حجم الاستخدام" في ملف لوحة العمل ( File Inspector ) ، وقم بتأكيد ذلك الحوار الذي يظهر. ثم قم بإلغاء تحديد خانة الاختيار نفسها - سيسألك Xcode عما إذا كنت تريد استخدام لوحة العمل هذه مع جهاز iPhone أو iPad ، وتحويل الشاشات فيه بشكل مناسب. لا حاجة لتحرير ملف القصة المصورة مباشرة . بالنسبة إلى كل من iPad و iPhone ، ما عليك سوى نسخ لوحة القصة نفسها وتهيئة جهاز واحد لجهاز iPad والآخر لجهاز iPhone باستخدام الطريقة الموضحة.

وقبل أن يقترح شخص ما استخدام فئات الحجم - في حين أنه رائع ، فهو أقل ملاءمة لواجهة المستخدم المخصصة بشكل كبير ، مثل الألعاب وغيرها


يجب إنشاء تقرير خطأ مع Apple. يمكنك القول أنها مكررة من الألغام (10167030) التي كانت مفتوحة منذ سبتمبر 2011. الشيء المحبط من وجهة نظري هو أن الميزة موجودة في Xcode 3 ...







storyboard