โปรดทราบว่าคำถามนี้มาจากปี 2008 และตอนนี้เป็นเพียงความสนใจในประวัติศาสตร์เท่านั้น
วิธีใดดีที่สุดในการสร้างแอปพลิเคชัน iPhone ที่ทำงานในโหมดแนวนอนตั้งแต่เริ่มต้นโดยไม่คำนึงถึงตำแหน่งของอุปกรณ์
ทั้งทางโปรแกรมและโดยใช้ตัวสร้างส่วนต่อประสาน
โปรดทราบว่าคำถามนี้มาจากปี 2008 และตอนนี้เป็นเพียงความสนใจในประวัติศาสตร์เท่านั้น
วิธีใดดีที่สุดในการสร้างแอปพลิเคชัน iPhone ที่ทำงานในโหมดแนวนอนตั้งแต่เริ่มต้นโดยไม่คำนึงถึงตำแหน่งของอุปกรณ์
ทั้งทางโปรแกรมและโดยใช้ตัวสร้างส่วนต่อประสาน
คำตอบ:
โปรดทราบว่าคำตอบนี้ล้าสมัยอย่างมาก /
คำตอบนี้เป็นเพียงความอยากรู้อยากเห็นทางประวัติศาสตร์เท่านั้น
ข่าวเด็ด! ดังที่ค้นพบโดย Andrew ด้านล่างปัญหานี้ได้รับการแก้ไขโดย Apple ใน 4.0+
ดูเหมือนว่าไม่จำเป็นต้องบังคับขนาดของมุมมองในทุกมุมมองอีกต่อไปและปัญหาร้ายแรงเฉพาะของแนวนอน "ใช้งานได้ในครั้งแรกเท่านั้น" ได้รับการแก้ไขแล้ว
เมื่อเดือนเมษายน 2554 ไม่สามารถทดสอบหรือสร้างอะไรที่ต่ำกว่า 4.0 ได้ดังนั้นคำถามจึงเป็นความอยากรู้อยากเห็นในอดีต เป็นเรื่องเหลือเชื่อที่สร้างปัญหาให้กับนักพัฒนามานานมาก
นี่คือการอภิปรายและวิธีแก้ปัญหาดั้งเดิม ตอนนี้ไม่เกี่ยวข้องอย่างยิ่งเนื่องจากระบบเหล่านี้ไม่สามารถใช้งานได้
มันยากมากที่จะทำให้งานนี้สมบูรณ์ - มีปัญหา / ข้อบกพร่องอย่างน้อยสามอย่างในการเล่น
ลองใช้ .. การออกแบบภูมิทัศน์ตัวสร้างอินเทอร์เฟซ
โดยเฉพาะอย่างยิ่งที่ระบุว่า"และคุณต้องใช้ shouldAutorotateToInterfaceOrientation อย่างถูกต้องทุกที่"หมายถึงทุกที่ทุกมุมมองแบบเต็มหน้าจอของคุณ
หวังว่ามันจะช่วยในฝันร้ายนี้!
การแจ้งเตือนที่สำคัญเกี่ยวกับปัญหาที่รู้จักกันดีเพิ่มเติมที่นี่: หากคุณกำลังพยายามสลับระหว่างมุมมองมากกว่าหนึ่งมุมมอง (แนวนอนทั้งหมด) มันไม่ง่ายเลย จำเป็นต้องจำสิ่งนี้ไว้มิฉะนั้นคุณจะเสียเวลาไปกับปัญหา แท้จริงมันเป็นไปไม่ได้ เป็นบั๊กแบบเปิดที่รู้จักกันมากที่สุดบนแพลตฟอร์ม iOS ไม่มีวิธีใดที่จะทำให้ฮาร์ดแวร์ทำให้มุมมองที่สองที่คุณโหลดเป็นแนวนอนได้ วิธีแก้ปัญหาที่น่ารำคาญ แต่เรียบง่ายและสิ่งที่คุณต้องทำคือมี UIViewController ต้นแบบที่ไม่สำคัญที่ไม่ทำอะไรเลยนอกจากนั่งที่นั่นและให้คุณสลับระหว่างมุมมองของคุณ
กล่าวอีกนัยหนึ่งใน iOS เนื่องจากข้อผิดพลาดที่สำคัญ:
[window addSubview:happyThing.view];
[window makeKeyAndVisible];
คุณสามารถทำได้เพียงครั้งเดียว ในภายหลังหากคุณพยายามลบ happyThing.view และใส่ newThing.view ไว้ในนั้นแทนมันไม่ทำงาน - นั่นคือสิ่งนั้น เครื่องจะไม่หมุนมุมมองเป็นแนวนอน ไม่มีการแก้ไขเคล็ดลับแม้แต่ Apple ก็ไม่สามารถใช้งานได้ วิธีแก้ปัญหาที่คุณต้องนำมาใช้คือการมี UIViewController โดยรวมที่อยู่ตรงนั้นและเก็บมุมมองต่างๆของคุณไว้ (happyThing, newThing ฯลฯ ) หวังว่าจะช่วยได้!
จากไซต์ Apple Dev:
ในการเริ่มแอปพลิเคชันของคุณในโหมดแนวนอนเพื่อให้แถบสถานะอยู่ในตำแหน่งที่เหมาะสมในทันทีให้แก้ไขไฟล์ Info.plist ของคุณเพื่อเพิ่มคีย์ UIInterfaceOrientation ด้วยค่าที่เหมาะสม (UIInterfaceOrientationLandscapeRight หรือ UIInterfaceOrientationLandscapeLeft) ดังแสดงในรายการที่ 2
รายการ 2: เริ่มแอปพลิเคชันของคุณในโหมดแนวนอน
<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
สรุปและบูรณาการจากโพสต์ทั้งหมดหลังจากทดสอบด้วยตัวเอง ตรวจสอบการอัปเดตสำหรับ 4.x, 5.x ด้านล่าง
ณ 3.2 คุณไม่สามารถเปลี่ยนการวางแนวของแอปพลิเคชันที่กำลังทำงานอยู่จากรหัสได้
แต่คุณสามารถเริ่มแอปพลิเคชันด้วยการวางแนวคงที่ได้แม้ว่าการทำเช่นนี้จะไม่ตรงไปตรงมา
ลองใช้สูตรนี้:
UISupportedInterfaceOrientations
ในInfo.plist
ไฟล์shouldAutorotateToInterfaceOrientation:
วิธีการ (เพื่อส่งคืนค่าเดียวกับที่คุณกำหนดไว้ใน plist แน่นอน)ในตัวควบคุมมุมมองทั้งหมดตั้งค่ามุมมองพื้นหลังด้วย
self.view.frame = CGRectMake(0, 0, 480, 320)
ในviewDidLoad
วิธีการ
อัปเดต (iOS 4.x, 5.x) : คู่มือการเขียนโปรแกรมแอป Apple iOS มีย่อหน้า "การเปิดตัวในโหมดแนวนอน" ในบท "เคล็ดลับแอปขั้นสูง"
อ้างอิง:
ก่อนอื่นฉันตั้งค่าใน info.plist
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
จากนั้นฉันใส่รหัสนี้ใน applicationDidFinishLaunching:
CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];
CGRect contentRect = CGRectMake(0, 0, 480, 320);
window.bounds = contentRect;
[window setCenter:CGPointMake(160.0f, 240.0f)];
ด้วยวิธีนี้ฉันสามารถทำงานกับมุมมองในตัวสร้างอินเทอร์เฟซในโหมดแนวนอน
คำตอบของ sasb และ michaelpryor ดูเหมือนจะถูกต้อง แต่ถ้ามันไม่ได้ผลสำหรับคุณลองใช้ทางเลือกนี้:
- (void)applicationDidFinishLaunchingUIApplication *)application {
application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}
หรืออันนี้:
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
หรืออันนี้:
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
คุณอาจต้องโทรหาwindow makeKeyAndVisible;
ก่อน
ไม่กี่ลิงค์: การพัฒนาในโหมดแนวนอน , iPhone SDK: วิธีการบังคับโหมดแนวนอนเท่านั้น?
@ Robert: โปรดดูที่iPhone ที่ SDK, NDA และกองมากเกิน
ฉันแปลกใจที่ยังไม่มีใครให้คำตอบนี้:
ในการทดสอบทั้งหมดของฉันเมื่อปิดตัวควบคุมมุมมองแบบโมดอลการวางแนวที่ต้องการของตัวควบคุมมุมมองหลักshouldAutorotateToInterfaceOrientation
จะได้รับเกียรติแม้ในขณะที่เป็นส่วนหนึ่งของ UINavigationController ดังนั้นวิธีแก้ปัญหานี้จึงง่ายมาก:
สร้าง UIViewController จำลองด้วย UIImageView สำหรับพื้นหลัง ตั้งค่าภาพเป็นภาพ default.png ที่แอปของคุณใช้เมื่อเริ่มต้น
เมื่อviewWillAppear
ถูกเรียกในตัวควบคุมมุมมองรูทของคุณเพียงแค่นำเสนอตัวควบคุมมุมมองจำลองโดยไม่มีภาพเคลื่อนไหว
เมื่อviewDidAppear
ถูกเรียกในตัวควบคุมมุมมองจำลองของคุณให้ปิดตัวควบคุมมุมมองด้วยภาพเคลื่อนไหวที่ละลายได้
งานนี้ไม่เพียง แต่ดูดี! BTW เพียงเพื่อความกระจ่างฉันใช้ตัวควบคุมมุมมองรูทเป็นviewWillAppear
ดังนี้:
- (void)viewWillAppear:(BOOL)animated
{
if ( dummy != nil ) {
[dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:dummy animated:NO];
[dummy release];
dummy = nil;
}
...
}
คู่มือการเขียนโปรแกรม iPhone OS ล่าสุดมีเนื้อหาทั้งหมดพร้อมโค้ดตัวอย่าง ฉันแน่ใจว่านี่เป็นการเพิ่มล่าสุดดังนั้นบางทีคุณอาจพลาดไป อธิบายถึงเงื่อนไขทั้งหมดที่คุณต้องปฏิบัติตาม โดยพื้นฐาน ...
มองหา "การเปิดในโหมดแนวนอน" หน้า 102
ดูคำตอบนี้: โหมดแนวนอนสำหรับ iPhone หรือ iPad เท่านั้น
แม้ว่าคุณจะใช้โหมดผสมคุณอาจจะดีกว่าด้วย
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];