Posts

Showing posts with the label loading

Shimmer Placeholder while Loading Data

Image
วันนี้จะแบ่งปันอะไรที่ได้มาจากการลองเล่นของเล่นตัวหนึ่งจาก Facebook ถ้าใครคุ้นตา ลองเปิด Facebook App ขึ้นนะครับ (ควรจะ Kill Process ไปก่อน) ในขณะที่กำลังโหลด News Feed อยู่นั้น คุณจะเห็นหน้าจอประมาณนี้ พร้อม Effect ที่เรียกว่า Shimmering มาลองดูวิธีทำกันครับ ไม่ยากอย่างที่คิด เพราะ Facebook เตรียมของให้เราแล้วนั่นคือ https://github.com/facebook/Shimmer คราวนี้ผมจะลองสร้าง Toy Project ตัวหนึ่งที่เป็น UITableView-based ธรรมดาเลย โดยผลลัพธ์สุดท้ายก็จะมีแค่นี้แหละ แสดงชื่อและอีเมล์ ขั้นตอนแรกให้สร้าง Prototype Cell อีกตัวขึ้นมาก่อน โดยให้มีโครงสร้างเหมือนกับ Prototype Cell ที่มีข้อมูลของเรา แต่แทนที่ Object ต่างๆ ด้วย UIView และอย่าลืมตั้งค่า Custom Class เป็น FBShimmerView ด้วยแบบนี้ ในที่นี้ผมตั้งชื่อ Cell ตัวนี้ว่า PlaceholderCell ต่อมาเนื้อหาใน PlaceholderCell ของผมก็จะเป็นประมาณนี้ Wait for the Code .... โดยจัดการสร้างและใส่ Content View ตอน -awakeFromNib และให้เริ่มแสดง Shimmering effect หลังจากที่ Auto Layout ทำงานเสร็จแล้ว คราวนี้ผมจะข้ามไปในส่...

How to do `Lazy Instantiation` in Swift

Image
Lazy Instantiation หรือ Lazy Loading (น่าจะ) ไม่มีโปรแกรมเมอร์คนไหน ไม่รู้จักท่านี้ ง่ายๆ ก็คือ "เราต้องการใช้อะไรสักอย่าง โดยสร้างมันขึ้นมา ณ ตอนที่จะใช้ และถ้ามีอยู่แล้วก็เอามันมาใช้ซะ" เพราะในการเขียนโปรแกรมบน Smart Phone การสร้างอะไรรอเอาไว้รอใช้งาน หรือต้องสร้างทุกครั้งขณะใช้งานเป็นการสิ้นเปลืองอย่างมาก เนื่องจากหน่วยความจำที่จำกัด (จริงๆ ผมใช้ท่านี้ในหลายๆ Blog ที่เขียนนะ วันนี้ได้มาเขียนอธิบายสักที) มาดู Code ในฝั่ง Objective-C กันก่อนเนอะ เข้าใจง่ายดีไหม ? ไม่มีอะไรเลย เช็คก่อน มีแล้วก็ส่งกลับ ไม่มีก็สร้างใหม่ จะเห็นว่า Property ตัวนี้จะถูกสร้างครั้งเดียวเท่านั้น และจะถูกสร้างขณะที่เรียกผ่าน Getter method ด้วย คราวนี้ใน Swift ก็จะ abstract ขึ้นมาสักหน่อยนะ ผมเลยอยากให้ดูในแบบของ Objective-C ก่อน ใน Swift นั้นเราจะใช้ keyword  lazy แปะไว้ที่ property และต้องประกาศเป็น var เท่านั้น (ตามพฤติกรรมที่จะเปลี่ยนแปลงค่าขณะถูกเรียก) แล้วถ้าเราต้องการกำหนดค่าในขณะที่ถูกเรียกผ่าน Getter method แบบโค้ด Objective-C ด้านบนล่ะ จะทำอย่างไร ? เราสามารถเขียน Closure ไ...