2 คะแนน โดย GN⁺ 2025-09-03 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • วิธีเลือกเวลาใน แอปปลุก ของ iPhone ไม่ได้เป็นดีไซน์แบบวงกลม
  • ภายนอกดูเหมือนเป็น อินเทอร์เฟซแบบหมุน แต่จริง ๆ แล้วสร้างจากลิสต์ยาว
  • ทำให้ผู้ใช้รู้สึกเหมือนกำลังเลื่อนแบบ ไม่มีจุดสิ้นสุด
  • เป็นกรณีศึกษาที่นักพัฒนาและนักออกแบบ UX ให้ความสนใจในฐานะ ภาพลวงตาของ UI
  • ความเข้าใจในวิธีการทำงานจริงสามารถนำไปอ้างอิงในการ พัฒนาแอป ได้

โครงสร้างตัวเลือกเวลาในแอปปลุกของ iPhone

  • ตัวเลือกสำหรับตั้งเวลาในแอปปลุก ของ iPhone เมื่อมองเผิน ๆ จะดูเหมือนเป็นรูปแบบวงกลม (วงล้อหมุน)
  • แต่ในความเป็นจริง ตัวเลือกนี้ถูกสร้างเป็น ลิสต์ที่ยาวมากและมีจุดเริ่มต้นกับจุดสิ้นสุดกำหนดไว้
  • เมื่อผู้ใช้เลื่อนขึ้นหรือลง จึงเกิดความรู้สึกเหมือนสามารถหมุนต่อไปได้เรื่อย ๆ
  • วิธีการทำเช่นนี้เป็นการออกแบบเพื่อมอบประสบการณ์ใช้งานที่คล้ายกัน โดยไม่ต้องใช้อินเทอร์เฟซวงกลมโดยตรง
  • นักพัฒนาออกแบบส่วนติดต่อผู้ใช้ให้ดูเหมือนวงล้อด้วยการใช้ ลิสต์แบบเลื่อนได้ไม่สิ้นสุด

มุมมองของนักพัฒนาและการออกแบบ UX

  • วิธีนี้ทำให้สามารถใช้ เพียงลิสต์ธรรมดา มาแทนอินเทอร์เฟซวงกลมที่ซับซ้อนได้
  • ในความเป็นจริง ปลายทั้งสองด้านของลิสต์ ไม่ได้เชื่อมไปยังทิศทางตรงข้าม เพียงแต่จำนวนรายการมีมากจนผู้ใช้แทบไม่มีทางเลื่อนไปถึงขอบเขตนั้น
  • การออกแบบลักษณะนี้ใช้ ภาพลวงตาของ UI เพื่อมอบประสบการณ์ตามที่ผู้ใช้คาดหวัง
  • เป็นตัวอย่างที่แสดงว่าในการพัฒนาแอป การทำลิสต์เพียงอย่างเดียวก็สามารถ ให้ทั้งประโยชน์ใช้สอยและการใช้งานแบบวงกลม ได้

บทสรุป

  • ตัวเลือกเวลาในแอปปลุกของ iPhone สร้างเอฟเฟกต์แบบวงกลมด้วย วิธีหมุนลิสต์ยาว
  • สิ่งนี้ชี้ให้เห็นแนวทางการออกแบบอินเทอร์เฟซที่ เข้าใจง่ายและมีประสิทธิภาพ สำหรับนักพัฒนาและนักออกแบบ UI/UX

1 ความคิดเห็น

 
GN⁺ 2025-09-03
ความคิดเห็นบน Hacker News
  • บั๊กที่น่าหงุดหงิดจริง ๆ (หรือไม่รู้ว่าควรเรียกว่าฟีเจอร์ดีไหม) ของแอปปลุกคือ ต้องรอให้วงล้อเลือกเวลาหยุดเด้งสนิทก่อน การตั้งค่า AM/PM ถึงจะถูกนำไปใช้จริง ถ้าแค่ปัดแล้วกดบันทึก การตั้งค่าเดิมจะยังค้างอยู่ ทำให้นาฬิกาปลุกสำคัญ 7am ยังคงเป็น 7pm แล้วสุดท้ายก็ไปทำงานสาย
    • ทุกวันนี้เหมือนแค่เขียนเมนูก็ยังทำได้ไม่ดีแล้ว เช่น ในหน้ารายการหลักของแอป Reminders บน macOS เวลาเลือกเมนูดรอปดาวน์ของเวลา ถ้าปล่อยปุ่มเมาส์เหนือเวลาที่ต้องการ แล้วขยับเคอร์เซอร์ขึ้นหรือลงนิดเดียวตอนที่แอนิเมชันแฟลชกำลังทำงาน มันจะเปลี่ยนไปเลือกเวลาอื่นแบบกะทันหัน ซึ่งไม่สอดคล้องกับรูปแบบการทำงานที่ macOS ใช้มาตลอดตั้งแต่ปี 1984 เลย ผมเคยรายงานบั๊กนี้ไปเมื่อหลายปีก่อน แต่คงมีเรื่องที่ถูกจัดลำดับความสำคัญสูงกว่านี้
    • เจอบั๊กนี้จนลำบากอยู่หลายครั้ง สุดท้ายเลยเปลี่ยนทุกอุปกรณ์ให้ใช้ระบบเวลา 24 ชั่วโมงทั้งหมด สำหรับอินเทอร์เฟซที่ต้องใช้ทุกวัน ผมคิดว่า UI วงล้อเลื่อนแนวตั้งของ iOS แย่มากทั้งในแง่การใช้งานและความสวยงาม แต่ก็ยังดีที่มีฟีเจอร์แตะตรงกลางวงล้อแล้วให้แป้นตัวเลขเด้งขึ้นมา วิธีกรอกเวลาด้วยคีย์แพดนั้นออกแบบมาดีมากและมีประสิทธิภาพ
    • นึกว่ามีแค่ผมคนเดียวที่เป็นแบบนี้ ที่แท้ไม่ใช่เลย นานขนาดนี้แล้ว Apple ก็ยังทำแอปปลุกให้ดีไม่ได้สักที
    • นี่คือปัญหาใหญ่ที่สุดอย่างหนึ่งหลังจากเปลี่ยนจาก Android มาใช้ iPhone แต่ที่ทำให้หงุดหงิดยิ่งกว่าคือ พอเล่าเรื่องแบบนี้ให้พวกนักพัฒนาหรือโปรแกรมเมอร์ฟัง ก็มักโดนปัดว่า "คุณใช้ไม่ถูกเองหรือเปล่า" หรือ "มันสำคัญขนาดนั้นเลยเหรอ" (มันสำคัญสิ ผมเองก็ไม่อยากตื่นสาย เลยต้องมานั่งคุยเรื่องนี้ไง!) เรารับเงินเดือนกันเกิน 100,000 ดอลลาร์ แต่กลับแก้เรื่องจุกจิกแบบนี้ให้เร็วไม่ได้ มันน่าอึดอัดจริง ๆ อยากให้มีความภูมิใจในงานกันบ้าง แล้วกล้าแก้บั๊กง่าย ๆ พวกนี้เสียที ถึงอย่างนั้น UX ของโลกนี้ก็ยังซับซ้อนขึ้นเรื่อย ๆ ทั้งที่ชอบพูดเรื่องความเรียบง่าย แต่ UI ของนาฬิกาปลุกกับตัวจับเวลากลับต่างกัน ทั้งที่หน้าตาคล้ายกันแค่ผิวเผิน หรืออีเวนต์ปฏิทินที่ซ้ำกันซึ่งน่าจะลบได้ด้วย regex บรรทัดเดียวก็ยังปล่อยให้โผล่อยู่ หรือหา contact ที่ชื่อซ้ำกันไม่เจอ เพราะขั้นตอนรวมรายชื่อถูกซ่อนไว้ พอรวมได้ยาก ๆ แล้วกลับมีอีเวนต์วันเกิดเพิ่มมาอีกอันที่ลบก็ไม่ได้ ฯลฯ (ทั้งหมดนี้คือประสบการณ์จริงของผม) ผมคิดว่าพวกเรากำลังทำให้ซอฟต์แวร์แย่ลงกันหมด AI ไม่ได้จะแย่งงานเพราะมันเพิ่มผลิตภาพหรอก แต่เพราะเราลดมาตรฐานคุณภาพลงต่ำเกินไปต่างหาก ทุกวันนี้แค่ไม่ได้เขียนด้วย Perl หรือ Brainfuck ก็น่านับถือแล้ว
    • เพราะแบบนี้ถึงมีฟีเจอร์ปลุกสำหรับการนอน/ตื่น UI ของฟีเจอร์นี้ดีมาก สามารถตั้งตารางรายสัปดาห์ได้ และเวลาปรับเวลาปลุก มันจะแสดงผ่าน UI นาฬิกาทรงกลมให้เห็นด้วยว่าคุณจะได้นอนเพิ่มอีกเท่าไร
  • เมื่อ 10 ปีก่อน แอปปลุกบนสมาร์ตโฟนที่ดีหน้าตาเป็นแบบนี้ ลองดู Nokia N9 alarm clock UI และยังมี กระทู้ถกเถียงบน Hacker News เกี่ยวกับมันด้วย
    • แอป Google Clock ก็มีฟีเจอร์คล้ายกัน หน้าหลักมีสไลเดอร์ ตัวเลือกเวลาแบบวงกลม (ส่วนตัวผมไม่ค่อยชอบ) และการแจ้งเตือนแบบ toast ที่บอกว่าเหลือเวลาก่อนปลุกอีกเท่าไร ขาดแค่ตัวเลือกทุกวัน/ไม่ใช้งาน
    • แอปนาฬิกาบน Android ค่อนข้างดี และหน้าตาคล้ายกับแอปปลุกของ Nokia N9 ผมเพิ่งย้ายมา iPhone เมื่อต้นปีนี้ แล้วรู้สึกว่าปัญหา UI หลายอย่างน่ารำคาญมาก เบื่อวงล้อหมุนช้า ๆ มาก และคิดถึงข้อความยืนยันแบบบน Android ที่บอกว่า "เหลืออีก x ชั่วโมงก่อนนาฬิกาปลุกดัง" มาก โดยเฉพาะตัวหมุนตัวเลขนี่แย่มาก ทุกครั้งที่ต้องตั้งอายุเด็กในแอป Hilton ด้วยวงล้อตัวเลขก็เครียดสะสม ผมไม่เข้าใจเลยว่า iOS ได้ชื่อเสียงว่าเป็นอะไรที่มหัศจรรย์ สนุก และใช้งานง่ายแบบเป็นธรรมชาติได้อย่างไร ตอนนี้เริ่มอยากกลับไปใช้ Pixel แล้ว
    • ที่ตลกคือ หน้าตั้งเวลานอนบน iOS ที่เข้าไปผ่านแอป Health นั้นหน้าตาคล้าย Nokia N9 alarm clock มาก
    • สมาร์ตโฟนที่ดีจริง ๆ เป็นเรื่องสำคัญมาก น่าเสียดายจริง ๆ ที่ Nokia เลิกธุรกิจไปทันทีหลังจากออกผลิตภัณฑ์ที่ดีที่สุดของตัวเอง
    • เดี๋ยวนี้คนรุ่นใหม่หลายคนอ่านเข็มนาฬิกาไม่เป็นแล้ว ถ้าจะออกแบบให้คนหมู่มากใช้ ก็น่าจะต้องคำนึงถึงจุดนี้ด้วย
  • อย่างน้อยการตั้งค่านาที/วินาทีก็น่าจะเป็นลิสต์สั้น ๆ เพื่อให้กลับไปที่ 00 ได้อย่างรวดเร็ว ในแอป BigClock บน PalmOS ถ้าแตะด้านบนของแต่ละหลัก ตัวเลขจะเพิ่มขึ้น 1 และถ้าแตะด้านล่างจะลดลง 1 ทำให้กรอกข้อมูลได้เร็วและคาดเดาได้มาก ไม่มีฟีดแบ็กภาพแบบวงล้อเลื่อนเด้ง ๆ แต่ก็เลือกเวลาที่ต้องการได้ง่าย BigClock แนะนำ1, BigClock แนะนำ2
    • ขอแค่มีคีย์บอร์ดก็พอ (จะเป็นคีย์แพดบนจอหรือคีย์แพดจริงก็ได้) มากสุดก็ป้อนแค่สี่ครั้งก็จบ
  • แอป Clock บน iOS แย่มาก ตอนนี้พอ iOS 26 มี AlarmKit เข้ามา ผมเลยดีใจมากที่จะได้สร้างแอปปลุกแบบกำหนดเองของตัวเอง ฟีเจอร์พื้นฐานมาก ๆ อย่าง "ปิดแค่พรุ่งนี้วันเดียว แต่ยังคงปลุกซ้ำตามเดิม" ก็ยังไม่มี หรือพวกนาฬิกาปลุกที่ผูกกับปฏิทินก็ไม่มีเหมือนกัน
    • ถ้าใช้ฟีเจอร์ Sleep ก็สามารถใช้ฟีเจอร์แบบ "ปิดแค่พรุ่งนี้" นี้แทนนาฬิกาปลุกทั่วไปได้มาหลายปีแล้ว เวลาเปลี่ยนตารางการนอน มันจะถามว่าจะเปลี่ยนทั้งตารางหรือปิดแค่ครั้งเดียว
    • การที่ Apple เปิดสิทธิให้ทำแอปปลุกโดยตรงเองแบบนี้ ทำให้รู้สึกเหมือนเป็นช่องโหว่ด้านความปลอดภัยขนาดใหญ่
    • ถ้าใช้ตารางการนอน คุณสามารถข้ามแค่การปลุกครั้งถัดไป หรือรองรับเวลาตื่นที่ต่างกันตามวันในสัปดาห์ได้ และตั้งค่าได้จากที่เดียวกับนาฬิกาปลุกทั่วไปเลย
    • ผมไม่ได้คิดว่ามันแย่อะไร กลับมองว่าเพราะมันเรียบง่าย เลยเข้าใจได้ในฐานะแอปพื้นฐาน
  • ผมสงสัยว่าหลังเขียนโค้ดนี้เสร็จ เขาไม่เคยกลับมาดูมันอีกเลยจริง ๆ หรือว่ามันรอดมาถึงยุคหลังรีไรต์โค้ดด้วยกันแน่ เมื่อก่อน iPhone มีชื่อเสียเรื่องนาฬิกาปลุกพังเวลาเขตเวลาเพี้ยนหรือช่วงเปลี่ยน daylight saving iPhone alarm bug – timezone/daylight saving issue
    • นี่ไม่เกี่ยวกับเขตเวลาหรือปัญหาของแอป Clock โดยตรง ผมคิดว่าข้อจำกัดนี้เกิดจากคอมโพเนนต์ UI ระดับระบบที่ชื่อ UIPickerView แอปของผมเองก็มี "บั๊ก" คล้ายกัน
    • ผมคิดว่านี่เป็นผลลัพธ์ของการเติบโตแบบค่อยเป็นค่อยไป ตอนแรกมันคงเป็นลิสต์ A-Z แต่พอมีคนอยากทำให้มันดูเหมือนหมุนเป็นวง วิธีแก้ที่ง่ายที่สุดในระดับ UI ก็คือเอาลิสต์ที่มีจำนวนจำกัดมาทำซ้ำหลาย ๆ รอบ เลยคงสภาพแบบนี้ไว้ เช่น ลิสต์จำกัดใน HTML นั้นทำได้ง่ายมาก แต่ลิสต์อนันต์แบบ virtualized ใน JS น่าจะต้องพอร์ตใหม่ทุกครั้งที่เปลี่ยนเฟรมเวิร์ก (เช่น เปลี่ยนไปเป็น SwiftUI)
    • การสร้างลิสต์วงกลมแบบอนันต์ที่เอาคอมโพเนนต์ชุดเดิมไม่กี่ตัวมาใช้ซ้ำวนไปเรื่อย ๆ นั้นยากเกินไป เลยมีโค้ดตรง ๆ แบบ (0..60).times(50).flatten() ที่เถื่อนหน่อยแต่แก้ปัญหาได้ 99% ด้วยแรงแค่ 1% ถ้า QA เจอปัญหาก็คงตอนเลื่อนไปสุดลิสต์เท่านั้น แล้วถึงตอนนั้น Product คงค่อยหยิบมันมาเป็นประเด็น ใครจะไปสนกันล่ะ
  • นี่เป็นวิธีแฮ็กที่ยอดเยี่ยมเพื่อหลีกเลี่ยงการพัฒนาวิดเจ็ตแบบกำหนดเอง ขอปรบมือให้วิศวกรนิรนามคนนั้น
  • วิธีนี้ถูกซ่อนไว้มาเกิน 10 ปีแล้ว น่าคิดเหมือนกันว่าจะมีทางแก้ที่ใช้ได้จริงแบบไหน
    • ผมคิดว่านิยมปฏิบัตินั้นดีกว่านิยมสมบูรณ์แบบ
  • สิ่งหนึ่งที่ผมคิดว่าน่าสนใจคือ ตัวจับเวลากับนาฬิกาปลุกมี implementation แยกจากกันอย่างชัดเจน ในนาฬิกาปลุก นาทีวนลูปได้ แต่ในตัวจับเวลาไม่เป็นแบบนั้น ทั้งที่อินเทอร์เฟซคล้ายกันมาก ผมไม่รู้เลยว่าทำไมถึงถูกทำต่างกัน และก็สงสัยด้วยว่าทำไมมันถึงไม่เป็นวงกลมจริง ๆ ผมมองว่านี่คือโค้ดที่เพิ่มความซับซ้อนโดยไม่จำเป็น
  • เห็นคนในคอมเมนต์นี้หลายคนบอกว่าเบื่อบั๊กนาฬิกาปลุกบน iOS กันมาก เลยอยากฝากทิปไว้เผื่อคนที่มีปัญหาแบบเดียวกัน Sharp ขายนาฬิกาปลุกราคาถูกแต่ใช้ได้ดีอยู่หลายรุ่น จ่ายแค่ 5–12 ดอลลาร์ก็หลุดพ้นจากบั๊กพวกนี้ได้ตลอดกาล แถมข้อดีสุดคือ อุปกรณ์ชิ้นแรกที่คุณเอื้อมไปจับตอนเช้า จะไม่ใช่สมาร์ตโฟนที่คอยทำลายสมองของคุณ สำหรับผม รุ่น Sharp Twin Bell ที่ซื้อจาก Walmart เป็นตัวที่แพงที่สุดแล้ว แต่ก็แค่ 12.63 ดอลลาร์
    • ผมก็ใช้รุ่นเดียวกันอยู่ ฟีเจอร์ที่ดีที่สุดซึ่งไม่เคยเจอในนาฬิกาปลุกดิจิทัลรุ่นเก่า คือมันบังคับให้คุณต้องตั้งปลุกเองทุกคืน มันมีแค่สวิตช์เปิดปิด และพอปลุกดังแล้วก็ต้องปิด จากนั้นต้องรออย่างน้อย 12 ชั่วโมงถึงจะเปิดอีกได้ (ไม่งั้นมันอาจดังตอนสองทุ่ม) เลยกลายเป็นกิจวัตรไปแล้วว่าทุกคืนจะเช็กตารางก่อนแล้วค่อยเปิดสวิตช์ปลุก ตอนนี้เลยไม่ต้องกลัวลืมตั้งปลุกวันหยุดหรือวันที่ต้องตื่นเช้าอีก และมันดังมากจริง ๆ จนผมไม่เคยได้ยินเสียงปลุกแล้วนอนต่อเลย
  • ผมไม่เข้าใจจริง ๆ ว่าทำไมตำแหน่งปุ่ม snooze กับ stop ในโหมดปลุกกับโหมดจับเวลาถึงสลับกัน บางอันปุ่ม stop อยู่กลางจอ บางอันอยู่ด้านล่าง ทำไมเรื่องแบบนี้ถึงไม่ถูกทำให้เป็นมาตรฐาน
    • ตอนเช้าที่งัวเงียครึ่งหลับครึ่งตื่น เวลาคลำหาโทรศัพท์ เรามักเผลอกดปุ่ม snooze สีส้มขนาดใหญ่ที่อยู่ตำแหน่งเดิมซึ่งคุ้นเคยได้ง่ายมาก ถ้าจะปิดปลุกให้หยุดจริง ๆ ต้องตื่นให้เต็มที่พอจะไปกดปุ่ม stop สีเทาที่สลับตำแหน่งไป ซึ่งตอนนั้นแหละเสียงปลุกถึงจะหยุด ถ้าปิด snooze ในการตั้งปลุก ก็จะใช้ปุ่ม stop สีส้มขนาดใหญ่ตรงกลางแบบเดียวกับตัวจับเวลาได้ แต่ได้ยินมาว่าใน iOS 26 การออกแบบนี้จะถูกเอาออก เพราะสองปุ่มหน้าตาต่างกันเกินไป น่าเสียดายที่สิ่งสำคัญที่สุดของนาฬิกาปลุกตอนนี้กลายเป็นการทำให้มันดูสวย
    • พี่น้องเอ๋ย อยากบอกว่าขอบคุณจริง ๆ ผมทรมานอยู่หลายปีเพราะรายละเอียดเล็ก ๆ พวกนี้ที่ขาดไป