콘텐츠로 건너뛰기
Home » 분류할 수 없는 » Page 2

분류할 수 없는

NSImage와 CGImage 변환하는 법

NSImage > CGImage로 변환하기 NSImage는 cgImage(forProposedRect:Context:hints:)라는 메소드를 가지고 있는데, 이는 어떤 영역에 그려질 최적의 CGImage 객체를 찾아서 리턴하는 기능을 수행한다.  이 때 모든 파라미터는 옵션이며, 전부 nil로 넣어도 상관없다. 다만 파라미터들은 NSImage가 가지고 있는 여러 개의 CGImage 표현형 중에서 어떤 것을 선택할지를 결정하는데 도움을 주는 힌트에 해당한다.  proposedDestRect는 CG이미지를 사용할 영역에 대한 참조로 주로 어느 해상도(크기)에서 사용될 것인지를 정한다. 만약 nil을 전달하면 NSImage의 크기 영역을 기준으로 삼게 된다. context는 그래픽 컨텍스트이며, hints 값은 그외의 힌트가 된다.  이미지 표현형을 통해서 얻기… 더 보기 »NSImage와 CGImage 변환하는 법

NSBitmpaImageRep의 사용법

CGImage는 CoreGraphics에서 사용하는 픽셀단위 비트맵이미지 데이터를 다루는 클래스이다. 이 클래스가 주로 이미지 렌더링이나 오프스크린 드로잉등에 사용되는 관계로 주요 API가 이러한 작업에 치중하고 있어서 실제로 이미지 파일로부터 데이터를 읽어서 생성하거나 데이터를 저장하는 작업은 클래스내에서 처리할 수 없다. 그나마 CIImage는 init?(contentsOf:)를 제공하기 때문에 지원가능한 파일을 읽어들여서 인스턴스를 만드는 작업을 바로 수행할 수 있다. 다만 실제로 CIImage는 렌더링되는 실제 이미지라기 보다는 코어이미지 내의 필터를 적용하는 레시피로 기능하기 때문에 상황은 약간 다른다. 또한 iOS의 경우에는 주로 사용되는 UIImage가 CGImage 와 CIImage로 이니셜라이저만으로 상호변환이 가능하며,… 더 보기 »NSBitmpaImageRep의 사용법

aiohttp에서 큰 파일을 업로드하는 법

파일 업로드는 보통 요청의 body에 인코딩된 파일 데이터를 넣어서 POST 요청으로 서버에 전달되는데, aiohttp에서는 다음과 같이 post를 처리하는 핸들러를 사용해서 이를 처리할 수 있다. 여기서 문제는 request.post() 메소드가 요청 데이터를 한꺼번에 메모리로 읽어들이기 때문에 메모리 부족으로 서버가 죽을 수 있는 상황이 있다는 것이다. 따라서 aiohttp에서 일반적으로 처리할 수 있는 요청의 크기는 2MB로 제한된다. 하지만 이 크기는 어지간한 사진 하나의 용량도 감당하기 어렵기 때문에 뭔가 다른 방법이 필요하다. (보통은 일종의 옵션 값 같은 걸로 최대 처리 요청 크기를 변경할 수 있을… 더 보기 »aiohttp에서 큰 파일을 업로드하는 법

델리게이트 패턴에서 제네릭으로 – Swift

(제목이 스포일러이긴한데…) 간단한 클래스를 하나 작성해보자. 0으로 시작하는 값에서 메소드를 하나를 호출하면 그 값을 1씩 증가시켜나가는 것이다. class Counter {   var value: Int = 0   func increase() {     value += 1     print("value: \(value)")   } } 현실적으로는 별 쓸 데 없는 이 클래스를 사용하려 할 때, 값이 변할 때 수행하는 동작을 입맛에 맞게 커스터마이징하고 싶은 경우가 있을 수 있다. 물론 increase() 메소드를 그 때 그 때마다 변경하면 되지만, 소스를 직접 수정할 수 없는 서드파티가 이 클래스를 사용한다면, 델리게이트를 만들어서 값이 변하는 이벤트의 처리를 맡길 수 있다. 예를 들어 변경된 새 값이 짝수인… 더 보기 »델리게이트 패턴에서 제네릭으로 – Swift

프로퍼티 리스트 타입

프로퍼티 리스트는 코코아의 표준 데이터 타입 클래스들을 직렬화/역직렬화하는데 사용되는 구조화된 데이터 포맷이다. 프로퍼티 리스트는 .plist 라는 확장자의 파일로 기록되어 코코아 앱에서 광범위하게 쓰인다. 특히 모든 코코아/코코아터치 앱의 번들에는 기본적으로 Info.plist라는 파일이 있고, 이 파일은 앱의 기본적인 론칭에 필요한 필수적인 정보들(메인 nib파일 및 스토리보드 경로등)이 지정되어 있다. 프로퍼티 리스트는 구조화된 트리이며, 파일로 저장될 때에는 XML의 형식이나 바이너리 파일로 저장될 수 있다. 인터페이스 빌더에서 작성한 UI 구성 정보는 모두 프로퍼티 리스트로 만들어진다. 이 정보는 XML 형식을 써서 .xib 포맷으로 기록되었다가, 프로젝트를 빌드하는… 더 보기 »프로퍼티 리스트 타입

이중옵셔널에 대하여 – Swift

Swift의 캐스팅 연산자인 as? 는 T 타입으로 캐스팅에 실행할 가능성을 내포하기 때문에 T? 타입을 만들게 된다. 이 때 변환하려는 값이 이미 옵셔널타입인 경우에는 nil이 아니면 T 타입으로 간주하여 최종 결과는 T??가 아닌 T?가 된다. var a: Any? = 8 if let x = a as? Int { // a는 Any?이면서 그 값이 Int 형으로 변환될 수 있으므로 // Int 형으로 변환된 후에 옵셔널로 마크되어 Int? 타입이 된다. // 다시 이 값은 let x = 에 의해서 언래핑되고 if 체크를 통과한다.… 더 보기 »이중옵셔널에 대하여 – Swift

오일러 프로젝트 69

오일러 프로젝트 69 번 문제는 오일러의 피(phi)함수에 관한 내용이다. 사실 소인수분해를 빠르게 할 수 있는 방법만 있다면, 오일러 피함수 역시 간단하게 구현할 수 있으나, 여기서는 범위가 1,000,000까지이므로 만만한 문제가 아닐 수 있다. 그런데 문제를 잘 파악해보면 의외로 쉬운 문제이기도 하다.
더 보기 »오일러 프로젝트 69

iOS에서 사용할 수 있는 애니메이션 구현 기법들에 대한 정리

애니메이션 구현 방법

iOS의 애니메이션 구현은 크게 두 가지로 나눌 수 있는데 하나는 UIKit의 애니메이션 API를 사용하는 것이고, 다른 하나는 코어 애니메이션을 사용하는 것이다. 오늘은 각각의 세부적인 구현보다는 각각의 API의 차이와 기본적인 사용방법에 대해서 살펴보도록 하겠다.더 보기 »iOS에서 사용할 수 있는 애니메이션 구현 기법들에 대한 정리

flex활용

flex-box 활용법 플렉스박스 레이아웃을 구성하는 요소는 컨테이너와 개별 아이템으로 나뉘어지며, 각각의 요소에 대해서 주로 적용하는 속성은 다음과 같다. 컨테이너 컨테이너는 우선 다음 항목을 적용한다. .container { display: flex; } 컨테이너 내부 아이템은 자신이 얼마나 늘어나고 줄어들 것인지를 결정한다. .item { flex: 1 0 auto; } 단일 요소의 가운대 배치 가로 방향으로 이어지는 단일 요소를 가운데로 정렬하고 align-items: center 속성을 부여한다. 이는 진행 축의 직교 방향으로 아이템을 배치하는 방법을 나타낸다. 복수요소의 가운대 배치 복수요소의 세로 가운데 배치는 단일 컨테이터-아이템 구조로는 구현할… 더 보기 »flex활용