เข้าถึงแคตตาล็อกสินทรัพย์โดยทางโปรแกรม


97

ฉันรู้ว่าเป็นฟีเจอร์ใหม่และอาจเป็นไปไม่ได้ แต่ฉันชอบที่จะสามารถใช้แคตตาล็อกเนื้อหาเพื่อจัดระเบียบเนื้อหาของฉันได้ แต่ฉันเข้าถึงรูปภาพทั้งหมดของฉันโดยใช้โปรแกรม ฉันจะเข้าถึงภาพของฉันตอนนี้ได้อย่างไร ฉันยังคงเข้าถึงพวกเขาโดยใช้ชื่อไฟล์ดังนี้:

[UIImage imageNamed:@"my-asset-name.png"];

ดูเหมือนว่าแคตตาล็อกเนื้อหาไม่ได้อ้างอิงส่วนขยายดังนั้นการเข้าถึงโดยไม่มี ".png" จะมีประสิทธิภาพมากกว่าหรือไม่

เหตุผลที่ฉันถามแทนที่จะทดสอบด้วยตัวเองก็คือแม้ว่าหลังจากลบเนื้อหาและแค็ตตาล็อกสินทรัพย์ของฉันออกแล้วจากนั้นทำความสะอาดโฟลเดอร์บิลด์ฉันก็ยังสามารถเข้าถึงเนื้อหาของฉันในแอปพลิเคชันของฉันได้ นี่เป็นการป้องกันไม่ให้ฉันทดสอบแคตตาล็อกเนื้อหาเมื่อฉันนำไปใช้

หลังจากดูแคตตาล็อกเนื้อหาแล้วฉันพบ "Contents.json" สำหรับแต่ละเนื้อหาและมีรูปแบบดังนี้:

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "my-asset@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

ฉันยังไม่แน่ใจว่าควรจะเข้าถึงมันอย่างไร แต่อาจจะช่วยได้?

คำตอบ:


139

ในการเข้าถึงรูปภาพจากแคตตาล็อกเนื้อหาคุณจะต้องเข้าถึงชื่อของกลุ่มเนื้อหาโดยไม่มีส่วนขยายใด ๆ

ดังนั้นถ้าคุณเพิ่มภาพชื่อไปยังแคตตาล็อกสินทรัพย์ก็จะสร้างกลุ่มสินทรัพย์ที่เรียกว่า@"my-button@2x.png"my-button

ตอนนี้สิ่งที่คุณต้องทำคือเข้าถึงภาพดังนี้:

// Objective-C
[UIImage imageNamed:@"my-button"];
// Swift
UIImage(named: "my-button")

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

ในการรวมรูปภาพสำหรับอุปกรณ์ขนาดต่างๆคุณอาจต้องสลับภาพภายใต้หัวข้อย่อย "อุปกรณ์" ในตัวเลือกของกลุ่มแคตตาล็อกเนื้อหา นี่คือตัวอย่างของการสลับนั้น (มีให้โดยคลิกขวาที่กลุ่ม)


รุ่น R4 เช่น 568 รองรับอยู่ที่นั่น หากคุณดูแอตทริบิวต์ของชุดรูปภาพคุณสามารถเลือก "เฉพาะอุปกรณ์" จากรายการอุปกรณ์แบบเลื่อนลงจากนั้นคุณสามารถเพิ่มภาพ R4 ซึ่งจะปรากฏบนอุปกรณ์ 4 "ที่ใช้ iOS 7
bandejapaisa

มีวิธีใดในการเข้าถึงข้อมูลการแบ่งส่วนข้อมูลทางโปรแกรมหรือไม่ นอกจากการรับคุณสมบัติ capInsets จากวัตถุ UIImage แล้ว?
Klaas

@Klaas ฉันไม่แน่ใจว่าทำไมคุณถึงต้องได้รับมันด้วยวิธีอื่นที่ไม่ใช่ไฟล์UIImage. และจากสิ่งที่ฉันเคยเห็นไม่เนื่องจากรูปภาพหมวดหมู่แต่ละภาพในกลุ่มอาจเป็นภาพที่แตกต่างกันโดยสิ้นเชิงดังนั้นจึงไม่มีข้อมูลทั่วไปเช่นการแบ่งส่วนข้อมูล หรือฉันขาดอะไรไป?
RileyE

@RileyE ฉันต้องทำการคำนวณบางอย่างสำหรับมุมมองภาพซ้อนทับที่กำหนดเองและต้องการใช้สิ่งที่ใส่เข้าไปเหมือนกัน เมื่อฉันต้องสร้าง UIImage สำหรับการคำนวณของฉัน แต่เพียงผู้เดียวฉันต้องการเก็บค่าที่ต้องการไว้ที่อื่น (และซ้ำซ้อน)
Klaas

1
ดูเหมือนว่ารหัส Swift จะเปลี่ยนเป็นUIImage(named: imageName)
HKTonyLee

27

นอกจากนี้ Apple ได้เพิ่มวิธีใหม่ในการรับภาพจากเนื้อหาด้วย Swift 3 โดยเรียกว่า'Image Literal'และทำงานดังต่อไปนี้:

ตัวอักษรภาพ


5

รวดเร็ว

คุณสามารถรับข้อมูลอ้างอิงไปยังรูปภาพในแคทเทลล็อกเนื้อหาของคุณได้ด้วย

UIImage(named: "myImageName")

คุณไม่จำเป็นต้องรวมส่วนขยาย


1

@RileyE ถูกต้อง 100% อย่างไรก็ตามจากประสบการณ์ของฉันเป็นที่น่าสังเกตว่าบางครั้งการอ้างอิงแคตตาล็อกเนื้อหาสำหรับรูปภาพอาจมีช่องว่างต่อท้าย คุณอาจไม่สังเกตเห็นหากใช้สตอรีบอร์ด / xibs เนื่องจากการเติมอัตโนมัติจะเพิ่มเข้าไป แต่เมื่อคุณอ้างอิงจากโค้ดก็ไม่ชัดเจนว่าปัญหาคืออะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.