iOS Programming Tip

[iOS6] 자주쓰는 팁 정리

- App이 표시되는 이름을 변경하고, 지역화 하기.

  InfoPlist.strings에 표시 이름 추가하기

  CFBundleDisplayName = "페이스트보드 테스트"


- AppDelegate에서 rootViewController읽어오기

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    NSLog(@"didFinishLaunchingWithOptions");
    
    if ([self.window.rootViewController isKindOfClass:[DBUViewController class]]) {
        _viewController = (DBUViewController *)self.window.rootViewController;
    }
    return YES;
}

- App실행 될 때, Noti에서 선택되어 들어왔는지 알아내기

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    if ([self.window.rootViewController isKindOfClass:[DBUViewController class]]) {
        _viewController = (DBUViewController *)self.window.rootViewController;
    }
    
    UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if(notification)
    {   //데이터가 있다.
        NSString *log = [NSString stringWithFormat:@"didFinishLaunchingWithOption: local noti: %@", notification.alertBody];
        [_viewController addLog: log];
        if (notification.userInfo) {
            [_viewController addLog:[notification.userInfo description]];
        }
    }
    return YES;
}

- UIColor에서 CIColor 얻기

UIColor의 경우, 지원 함수에서는 값을 읽는 것은 없는 것 같습니다.
CGColorRef를 얻어서, CIColor로 변경하고, red, green, blue, alpha를 읽어서 값을 알아낼 수 있습니다.

        CGColorRef cRef = [UIColor lightGrayColor].CGColor;
        CIColor *color = [CIColor colorWithCGColor:cRef];
        NSLog(@"%0.4f, %0.4f, %0.4f, %0.4f", color.red, color.green, color.blue, color.alpha);

- UIView의 내용을 이미지로 그리기

// Screen shot the view
+ (UIImage *) imageFromView: (UIView *) theView
{
 UIGraphicsBeginImageContext(theView.frame.size);
 CGContextRef context = UIGraphicsGetCurrentContext();
    
 [theView.layer renderInContext:context];
 UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    
 UIGraphicsEndImageContext();
 return theImage;
}

+ (void) saveImage: (UIImage *) image toPDFFile: (NSString *) path
{
    CGRect theBounds = (CGRect){.size=image.size};
    UIGraphicsBeginPDFContextToFile(path, theBounds, nil);
    {
        UIGraphicsBeginPDFPage();
        [image drawInRect:theBounds];
    }
    UIGraphicsEndPDFContext();
}

+ (void) performScreenshot
{
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    UIImage *screenshot = [self imageFromView:window];
    NSString *destination = [NSHomeDirectory() stringByAppendingString:@"/Documents/Screenshot.pdf"];
    NSLog(@"%@",destination);
    if ([[NSFileManager defaultManager] fileExistsAtPath:destination])
        [[NSFileManager defaultManager] removeItemAtPath:destination error:nil];
    [self saveImage:screenshot toPDFFile:destination];
}

- Xib파일에서 View 읽어오기

    UIView *myView =(UIView *)[[[NSBundle mainBundle] loadNibNamed:@"XIB파일이름" owner:self options:nil] objectAtIndex:0];

- Storyboard에서 특정 ViewController 읽어오기

myViewController = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerID"]; //MyViewControllerID 스토리보드에 등록한 ID

- UIScrollView에 대한 간단한 정리.

자주사용하지 않아서 잘 잊어버리는 관계로, 간단하게 그림으로 정리합니다.

- 각도와 이동거리로, Point 위치 계산하기. 

  x좌표 = x + cosf(degree*M_PI/180) * delta
  y좌표 = y + sinf((degree-180)*M_PI/180) * delta ( y축이 아래로 증가하게 되므로 180도 이동시켜준다.)