프로그래밍 방식으로 자산 카탈로그 액세스


96

나는 그것이 새로운 기능이라는 것을 알고 있으며 이것이 가능하지 않을 수 있지만 자산 카탈로그를 사용하여 자산을 구성 할 수 있기를 원하지만 모든 이미지에 프로그래밍 방식으로 액세스합니다. 이제 내 이미지에 어떻게 액세스합니까? 다음과 같은 파일 이름으로 여전히 액세스합니까?

[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"
  }
}

어떻게 액세스해야할지 모르겠지만 이것이 도움이 될까요?

답변:


138

자산 카탈로그에서 이미지에 액세스하려면 확장자없이 자산 그룹의 이름에만 액세스하면됩니다.

따라서 @"my-button@2x.png"자산 카탈로그에 이름이 지정된 이미지를 추가하면라는 자산 그룹이 생성됩니다 my-button.

이제 다음과 같이 이미지에 액세스하기 만하면됩니다.

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

또한 자산 그룹의 이름을 바꾸거나 (이미지 이름을 바꾸지 않고) 개별 구성 요소를 변경하여 자산 그룹을 편집 할 수 있습니다. 이렇게하면 더 쉬운 명명 규칙을 따를 수있을뿐만 아니라 확인 UIScreen scale없이 서로 다른 에셋간에 완전히 다른 자산을 표시 할 수 있습니다 scale.

다양한 장치 크기에 대한 이미지를 통합하려면 자산 카탈로그 그룹 옵션의 "장치"부제목 아래에서 전환해야 할 수 있습니다. 다음은 해당 토글의 예입니다 (그룹을 마우스 오른쪽 버튼으로 클릭하여 사용 가능).


R4 버전, 즉 568 지원이 있습니다. 당신이 이미지 세트의 속성을 볼 경우, 장치가 드롭 다운에서 당신은 '장치 별'을 선택할 수 있습니다, 그리고 당신은 아이폰 OS 7을 실행 4 "장치에 나타날 것이다 R4 이미지를 추가 할 수 있습니다
bandejapaisa

슬라이싱 정보에 프로그래밍 방식으로 액세스 할 수있는 방법이 있습니까? UIImage 객체에서 capInsets 속성을 얻는 것 외에?
Klaas 2013 년

@Klaas .NET 이외의 다른 방법으로 가져와야하는 이유를 잘 모르겠습니다 UIImage. 그리고 제가 본 바에 따르면 그룹의 각 카테고리 이미지는 완전히 다른 이미지 일 수 있으므로 슬라이싱과 같은 일반적인 정보를 사용할 수 없습니다. 아니면 내가 뭔가를 놓치고 있습니까?
RileyE 2013 년

@RileyE 사용자 지정 오버레이보기에 대한 몇 가지 계산을 수행해야하며 동일한 삽입을 사용하고 싶습니다. 계산을 위해 UIImage 만 생성해야 할 때 필요한 값을 다른 곳에 저장하는 것이 좋습니다 (중복).
Klaas

1
스위프트 코드로 변경 될 것으로 보인다UIImage(named: imageName)
HKTonyLee

26

또한 Apple은 Swift 3를 사용하여 자산에서 이미지를 가져 오는 새로운 방법을 추가했습니다. 'Image Literal' 이라고 부르며 아래와 같이 작동합니다.

이미지 리터럴


5

빠른

다음을 사용하여 자산 카테고리의 이미지에 대한 참조를 얻을 수 있습니다.

UIImage(named: "myImageName")

확장을 포함 할 필요가 없습니다.


1

@RileyE는 100 % 맞습니다. 그러나 내 경험에 따르면 때때로 이미지의 자산 카탈로그 참조에 후행 공백이 포함될 수 있다는 점도 주목할 가치가 있습니다. 자동 완성 기능이 추가 할 때 스토리 보드 / xibs를 사용하면 눈치 채지 못할 것입니다. 그러나 코드에서 참조 할 때 문제가 무엇인지 명확하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.