본문 바로가기
iOS/Objective-C

Extension

by 패쓰킴 2022. 4. 25.
728x90

파일 생성

1. cocoa touch로 new file

2. extenstion 하려는 Subclass 선택 후 class명 작성

 

이렇게 하면 지정한 class명으로 .h와 .m 파일이 생성됨

// .h
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface 클래스명 : sub클래스

@end

NS_ASSUME_NONNULL_END


// .m
#import "클래스명.h"

@implementation CustomMarker

@end



UIView Extension 예제

- custom drawing imgae 생성 시

// .h
NS_ASSUME_NONNULL_BEGIN

@interface CustomImage : UIView

- (UIImage*) createImage;
@end

NS_ASSUME_NONNULL_END
// .m
#import "CustomImage.h"
#import "Util.h"

@implementation CustomImage


- (void)drawRect:(CGRect)rect {
    // Drawing code
    [self setBackgroundColor:[UIColor clearColor]];
}

- (UIImage*) createImage{    
    CGRect rects1 = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
    
    UIGraphicsBeginImageContextWithOptions(rects1.size, NO, 0);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    [self.layer renderInContext:context];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return image;
    
}

@end

수정할만한 소스

WWDC18에서 iOS10부터 UIGraphicsBeginImageContextWithOptions 대신 UIGraphicsImageRenderer사용을 권고하고 있다.

- (UIImage*) createImage {
    UIGraphicsImageRendererFormat * format = [UIGraphicsImageRendererFormat defaultFormat];
    UIGraphicsImageRenderer * renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(self.frame.size.width, self.frame.size.height) format:format];
    UIImage * image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
        [self.layer renderInContext:rendererContext.CGContext];
    }];
    return image;
}

 

- 사용

@interface ViewController () {
  customImage * customImg;
}
@end
@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  
  customImg = [[customImage alloc] initWithFrame: CGRectMake(0, 0, 40, 40)];
  [customImg addSubview: 사용하려는 이미지뷰];
}
@end
728x90

'iOS > Objective-C' 카테고리의 다른 글

NotificationCenter(Observer)  (0) 2022.06.10
integer 값 참조 오류  (0) 2022.05.20
UIView에 그라데이션 적용하기  (0) 2022.04.01
스트링 인터닝(String Interning)  (0) 2021.12.15
cornerRadius 원하는 부분에만 적용  (0) 2021.12.15

댓글