2012년 12월 24일 월요일

iOS 팁 - 프로그래스바를 가지고 있는 AlertView


- (void)createProgressionAlert
{
    progressAlert = [[UIAlertView alloc] initWithTitle:@"리소스 다운로드" message:@"중요 리소스를 다운로드 받고 있습니다. 잠시 기다려 주세요." delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
    // Create the progress bar and add it to the alert
    progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(30.0f, 90.0f, 225.0f, 90.0f)];
    [progressAlert addSubview:progressView];
    [progressView setProgressViewStyle:UIProgressViewStyleBar];
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30.0f, 100.0f, 225.0f, 40.0f)];
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor whiteColor];
    label.textAlignment = UITextAlignmentRight;
    label.font = [UIFont systemFontOfSize:14.0f];
    label.text = @"";
    label.tag = 1;
    [progressAlert addSubview:label];
    
    [progressAlert show];
    [progressAlert release];
}


progressView 는 헤더 파일에서 선언 한다.

label에 접근 하기 위해서 는

UILabel *label = (UILabel *)[progressAlert viewWithTag:1];

이렇게 하면 접근 가능 하다.

네트워크에서 무언가를 내려 받거나 할 때 진행 그래프 표시용 으로 사용하면 된다.

iOS팁 약관 동의 같은 긴 문서를 보여 줄때


UITextView *txtEULA = [[[UITextView alloc] initWithFrame:CGRectMake(45,145,225, 320) autorelease];
로 잘 붙여 넣고

setText를 하면 된다.

그럼 그 긴 문장을 다 쳐 넣어야 하느냐?


- (NSString *)agreeText {
    
    NSString *str = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"agree" ofType: @"txt"] usedEncoding:nil error:nil];
    return str;
}




[txtEULA setText:[self agreeText]];


agrreText 메서드는
앱에서 파일로 읽어 들인다.

프로젝트에 agree.txt파일을 추가 하고

파일에서 내용을 얻어다가 txtEULA에 넣어 주면 된다.




2012년 12월 10일 월요일

mountain lion에서 Windows 한글 text파일 열기 문제

아직도 smi파일은 windows 에서 windows dos 인코딩 (949 ) 로 인코딩 되어 잇는 파일이 많다.
osx는 UTF-8이라서 기본 설정된 상태에서는 이러한 텍스트 파일을 osx에서 열면
먼 글인지 알아 볼수가 없다.

TextWrangler는 앱으로 파일을 열어 보면 알아 볼수가 없다.
이프로그램을 사용해본 사람이라면 인코딩 환경 설정에서 다음과 같이 추가 할 것이다.

하지만 그래도 효과가 없다.

어째 서지 분명히  한글 관련된 인코딩을 모두 추가 했는데... 

여러 방법을 다 동원해도 안된다.

마운틴 라이언에 버그인가?

나는 라이언에서 분명 TextWrangler로 잘 열고 UTF-8로 변환도 잘했는데....

해답은
마운틴 라이언에 기본 텍스트 편집기에 환경설정에서
파일 열 때를 클릭
한국어 인코딩을 선택해 주어야 한다.

아무래도 TextWrangler는 내부 코드가 마운틴 라이언에 텍스트 편집기에 의존적 인것 같다.

이렇게 설정 하고 나니 도스용 한글 ( cp-949) 인코딩된 텍스트 파일이 보기 좋게 열린다.

2012년 12월 3일 월요일

iOS 프로그래밍 팁 - UITextField로 전화번호 입력 받기


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

}

델리게이트 함수에

다음과 같은 코드가 필요하다.

3자가 넘어가면 - (대쉬) 추가
010-
또 8자가 넘어가면 (대쉬) 추가
010-674-

여기서 번호자리가 5자가 되면
가운데 3자리가 4자리가 되게

이거 그대로 코딩을 하면

NSString stringWithFormat:과

txtField setText:
를 이용하면 된다.

NSUInteger currentLength = textField.text.length;
        NSCharacterSet *numbers = [NSCharacterSet decimalDigitCharacterSet];
         
        if (range.length == 1) {
            return YES;
        }
        
        if ([numbers characterIsMember:[string characterAtIndex:0]]) {
           if ( currentLength == 3 ) {
                if (range.length != 1) {
                    NSString *firstThreeDigits = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *updatedText;
                    
                    if ([string isEqualToString:@"-"]) {
                        updatedText = [NSString stringWithFormat:@"%@",firstThreeDigits];
                    } else {
                        updatedText = [NSString stringWithFormat:@"%@-",firstThreeDigits];
                    }
                    
                    [textField setText:updatedText];
                }
            } else if ( currentLength > 3 && currentLength < 8 ) {
                if ( range.length != 1 ) {
                    NSString *firstThree = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *dash = [textField.text substringWithRange:NSMakeRange(3, 1)];
                    
                    NSUInteger newLenght = range.location - 4;
                    NSString *nextDigits = [textField.text substringWithRange:NSMakeRange(4, newLenght)];
                    NSString *updatedText = [NSString stringWithFormat:@"%@%@%@",firstThree,dash,nextDigits];
                    [textField setText:updatedText];
                }
            } else if ( currentLength == 8 ) {
                if ( range.length != 1 ) {
                    NSString *areaCode = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *firstThree = [textField.text substringWithRange:NSMakeRange(4, 3)];
                    NSString *nextDigit = [textField.text substringWithRange:NSMakeRange(7, 1)];
                    [textField setText:[NSString stringWithFormat:@"%@-%@-%@",areaCode,firstThree,nextDigit]];
                }
            } else if ( currentLength == 12 ) {
                if ( range.length != 1 ) {
                    NSString *areaCode = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *firstThree = [textField.text substringWithRange:NSMakeRange(4, 3)];
                    NSString *nextDigit = [textField.text substringWithRange:NSMakeRange(8, 1)];
                    NSString *nextDigit2 = [textField.text substringWithRange:NSMakeRange(9, 3)];
                    [textField setText:[NSString stringWithFormat:@"%@-%@%@-%@",areaCode,firstThree,nextDigit,nextDigit2]];
                }
            }
        } else {
            return NO;
        }
        return YES;

2012년 12월 2일 일요일

iOS 프로그래밍 팁 - UIPickerView



UIPickerView를 하단에 ActionSheet와 조합하고 닫기 버튼까지 함께 세트로


    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                             delegate:nil
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];
    
    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    
    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);
    
    UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.dataSource = self;
    pickerView.delegate = self;
    
    [actionSheet addSubview:pickerView];
    [pickerView release];
    
    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"확인"]];
    closeButton.momentary = YES;
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blackColor];
    [closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged];
    [actionSheet addSubview:closeButton];
    [closeButton release];
    
    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];
    
    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];


헤더파일에는 UIPickerViewDelegate, UIPickerViewDataSourec 를 선언부에 추가 해두고
아래와같이 델리게이트 함수를 추가하고 열수 행수 그리고 데이터 문자열을 출력하는 
함수를 구현해 준다.

//열수
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
}

//행수
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

}

//데이터
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
}



2012년 12월 1일 토요일

2012 late mac mini review

고급형 95만원짜리 맥미니 
CTO 선택을 전혀 안했다. 하드디스크 1TB 하나에 CPU 2.3Ghz i7 쿼드
그래픽은 HD4000
여기에 메모리만 16기가로 업데이트 했다.

메모리가 4기가 모델인데 16기가로 업데이트 하면 HD4000이 공유 메모리로 768MB 가져간다.
4기가 일때는 384MB를 가져가는거 같다.

그래픽에 성능은 잘모르겠으나 CPU에 성능은 정말 대단하다.

현재 2012년 12월 1일 대략 1달간 사용한 경험으로는 2007년 c2d1.83ghz 모델에 비해 체감 속도가 수십배 빠른 느낌
2008년 imac 24인치에 비해 10배는 빠른 느낌 이랄까
주로 맥으로 집에서 하는일은 소소한 iphone 앱개발
주로 사용하는 어플은  xcode인데 2007 맥미니에서는 xcode4가 너무 무겁게 느껴 졌는데
이번 모델에서는 너무 가볍다.
어떤 앱을 사용해야 이 머신을 괴롭힐수 있으려나.


결국 16기가에 메모리와 이엄청난 쿼드 코어 CPU를 마구 마구 사용하는 방법은 VirtualBox
이다.
여기에 xp설치, windows 7 설치, ubuntu 12.10 설치

Virtual Box속에 설치된 7에 성능지수는 T60 (c2d1.83 3GB) 모델 보다 그래픽 빼고는
모두 압서는것 같다.

네이티브 windows 7머신 T60 노트북 보다 더빠른 성능을 내는듯한 이 무서운 괴물 머신이다.

1개월 가량 써본 최신에 맥미니 대만족이다.