Commonlife's Blog

My daily life

Archive for the ‘Information’ Category

iOS : 키보드 상태에 따른 화면제어

with 2 comments

기존 소스에서 키보드가 올라오면 키보드를 제외한 화면을 터치하면 키보드가 내려가는 걸 구현하려 했다.

* 조건사항 : 키보드를 제외한 화면에 버튼들이 많다. (실제 동작하는 버튼들)

 

* 계획 :

1. 화면을 덮는 UIView를 만든다.

2. 해당 UIView는 setHidden:YES 상태로 초기화

3. 키보드가 올라오면 해당 UIView는 setHidden:NO

4. UIView를 터치하면 키보드를 내린다.

5. 키보드가 내려가면 해당 UIView는 다시 setHidden:YES가 된다.

 

* 진행 중 문제 상황

1. xib 파일이 언어별로 나뉘어 존재하고 있었는데(2개) 상위 xib 파일에서 UIView를 붙였더니 실제 xib파일에 공통으로 적용되지 않는다.

  • 해결 : 각 xib파일 마다 UIView를 붙였음.

2. UIView에 터치 이벤트가 적용되지 않는다. (UIControlEventTouchUpInside)

  • 해결 : 결국 투명한 UIButton으로 바꾸고 이벤트를 적용시켰다.

3. 키보드 레이아웃을 default를 했음에도 줄바꿈이 되지 않는다.

  • 해결 : 아래 메소드에서 @”\n”을 따로 처리하고 있었다.
  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

 

* 부가적으로 키보드 상태를 알수 있는 메소드들

  • (BOOL)textViewShouldBeginEditing:(UITextView *)textView : 말그대로 키보드가 나오는 시점. 여기서 UIButton을 setHidden:NO
  • (BOOL)textViewShouldEndEditing:(UITextView *)textView : 키보드가 들어가는 시점. 여기서 UIButton을 setHidden:YES
  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

Written by tocommonlife

2012/09/25 at 02:54

iOS : 갤러리를 통해 가져오는 이미지 crop하기

leave a comment »

기본 갤러리 혹은 카메라를 통해 이미지를 가져올 때 crop하여 가져오게 하고 싶었는데 기존 소스를 수정해야 했다. 문제는 기존의 ViewController들을 거쳐야 한다는 점.

AviewController에서 ActionSheet를 통해서 갤러리 혹은 카메라를 선택하게 한 후 이미지를 선택하면 선택한 이미지를 BviewController에서 띄우고 여기서 NavigationBar를 이용해 서버에 등록한다.

이 과정에서 crop 단계를 추가한 것이다. 그런데 문제가 BviewController에서 NavigationBar가 나오지 않는 문제점이 발생되는 것이다.

– 앨범에서 사진 가져오기 : UIImagePickerControllerSourceTypePhotoLibrary

– 필요한 것들 :

  • UIImagePickerControllerDelegate : image를 가져오기 위한 delegate.
  • UINavigationControllerDelegate : image를 가져온 후 navigation bar에서 ok, cancel을 위한 delegate.
  • UIImagePickerController : Image Picker를 가져오기 위한 변수

 

– source : 호출하려는 화면의 AviewController에서

UIImagePickerController *imgPickerController = [[UIImagePickerControlleralloc] init];
[imgPickerControllersetDelegate:self];
imgPickerController.allowsEditing = YES;     //편집모드(crop)
[imgPickerControllersetSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
// 갤러리에서 이미지를 가져옴.

//[imgPickerControllersetSourceType:UIImagePickerControllerSourceTypeCamera];
// 카메라를 통해 이미지를 가져옴.

[selfpresentModalViewController:imgPickerControlleranimated:YES];                     // 화면전환.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 이미지를 가져온 후 처리작업.
    UIImage *cameraImage = [info objectForKey:UIImagePickerControllerEditedImage];

    // 카메라에서 가져온 경우 : 카메라로 사진을 찍고 바로 사용하기 때문에 ViewController를 만들 필요는 없음.
    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
        UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);
        [self dismissModalViewControllerAnimated:YES];
    }

    // 갤러리에서 가져온 경우 : 이미지를 가지고 새로운 ViewController를 만들어줘야 함.
    else if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
        // crop한 이미지를 가지고 새로운 ViewController 만들기
        [picker pushViewController:newViewController animated:YES];
    }
}

– 새로운 ViewController에서 닥친 문제점은 기존에 사진을 바로 보여줄 때 NavigationBar가 잘 보이고 버튼들도 잘 보였음. 그런데 crop한 이미지로 대체하자 NavigationBar가 검은색으로만 나옴. 버튼들도 보이지 않아 작동하지 못함.

– BviewController에서 추가한 코드(원인은 찾지 못했지만 아래 코드를 넣어야만 navigationbar가 나타남.)

  • self.navigationController.navigationBarHidden=NO;

Written by tocommonlife

2012/09/14 at 02:29

NSLog 출력 내용

leave a comment »

2012-09-06 10:46:05.714 CMLSampleFoundation[575:403] The new date lives at 2012-09-06 01:46:05 +0000

  • 날짜 : 2012-09-06
  • 시간 : 10:46:05.714
  • 프로그램이름 : CMLSampleFoundation
  • 프로세스 ID : [575:403]
  • 출력내용 : The new date lives at 2012-09-06 01:46:05 +0000

Written by tocommonlife

2012/09/06 at 01:48

iOS에 게시됨

Tagged with ,

MacBook에 Ubuntu 설치 후 다시 되돌아오기

leave a comment »

맥북에 리눅스를 설치하려한 이유

  1. 지금 맥북의 성능이 조금씩 힘들어지기 시작한다.
  2. 애플 노트북이 비싸다.
  3. 다음 노트북을 살 때엔 비 애플 노트북을 구입하여 리눅스를 설치해서 사용하겠다는 계획을 세우게 됨.

 

맥북에서 우분투를 설치한 후의 불편한 점

  1. 스크롤 방향의 반대.
  2. Mac OS와 달리 GUI 환경에서 Root 환경은 Root 계정으로 따로 생성된다. (user A가 환경설정을 다 마친 후 gui상에서 root의 권한이 필요한 경우(terminal 제외) root로 다시 로그인을 하고 환경설정을 다시 해야 한다.)
  3. 재부팅 시 멈춘다.(종료 후 시작은 정상작동)
  4. Mac OS의 경우 /Applications 가 존재하여 응용프로그램 관리가 수월하지만 리눅스의 경우 없다.
  5. 리눅스에서 Mac OS의 영역에 GUI 환경에서 진입할 수가 없었다.(2번의 이유, 이건 나의 부족일 확률이 높음)

 

리눅스를 떠나며…

  1. 어차피 맥북이라 성능향상 효과를 기대할 수가 없다.
  2. 그럴거라면 굳이 지금 우분투를 할 필요가 없다는 생각.
  3. 더불어 리눅스에서 Mac OS X 영역에 접근이 안되니(GUI – 일반계정) 데이터를 중복할 수 밖에 없었다.

 

결국 나의 부족과 맥북의 사양으로 인하여 다시 Mac OS X으로 돌아가기로 했다.

  1. 문제는 리눅스의 swap영역이 Mac OS X의 디스크 유틸리티로 삭제 되지 않는다.
  2. 해결은 리눅스 설치 CD로 부팅 후 다시 리눅스를 설치하면서 swap영역을 지워버렸다.
  3. 이 후 Mac OS X으로 부팅 후 디스크 유틸리티로 리눅스 영역의 파티션을 삭제.

 

그래도 다음 노트북은 비 애플 노트북에 리눅스의 조합이 괜찮을 듯 싶다.

 

Written by tocommonlife

2012/08/17 at 11:01

mac os에 게시됨

Tagged with , ,

2개 이상의, 복수개의 레이아웃을 가진 ListView에서 ViewHolder 사용하기

leave a comment »

ListView를 활용하다 보면 거의 대부분이 두 개이상의 아이템 레이아웃을 활용할 때가 많다.

그럴 때면 ViewHolder를 활용하기가 참 난감하다. 하지만 메모리를 생각하면 ViewHolder를 활용해야 할텐데, 그게 잘 되지 않으니 고민이 깊어진다.

하지만 아래와 같이 활용하면 가능하다.

if (type == LIST_TYPE_01) {
    if (convertView == null) {
        separatorHolder = new SeparatorViewHolder();
        convertView = mInflater.inflate(R.layout.layout_01, null);
        separatorHolder.text = (TextView) convertView.findViewById(R.id.header_name);
        convertView.setTag(separatorHolder);
    } else {
        if (convertView.getTag() instanceof SeparatorViewHolder) {
            separatorHolder = (SeparatorViewHolder) convertView.getTag();
        } else {
            separatorHolder = new SeparatorViewHolder();
            convertView = mInflater.inflate(R.layout.layout_01, null);
            separatorHolder.text = (TextView) convertView.findViewById(R.id.header_name);
            convertView.setTag(separatorHolder);
        }
    }
    // layout 구현
} else {
    if (convertView == null) {
        secondViewHolder = new SecondViewHolder();
        convertView = mInflater.inflate(R.layout.layout_2, null);
        secondViewHolder.frameLayout = (FrameLayout) convertView.findViewById(R.id.frame_layout);
        secondViewHolder.text = (TextView) convertView.findViewById(R.id.text_view);
        secondViewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
        convertView.setTag(secondViewHolder);
    } else {
        if (convertView.getTag() instanceof SecondViewHolder) {
            secondViewHolder = (SecondViewHolder) convertView.getTag();
        } else {
            secondViewHolder = new SecondViewHolder();
            convertView = mInflater.inflate(R.layout.layout_2, null);
            secondViewHolder.frameLayout = (FrameLayout) convertView.findViewById(R.id.frame_layout);
            secondViewHolder.text = (TextView) convertView.findViewById(R.id.text_view);
            secondViewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
            convertView.setTag(secondViewHolder);
        }
    }
    // layout 구현
}

convertView.getTag()를 호출하기 전에 getTag()에 의해 return되는 객체가 사용하려는 ViewHolder가 맞는 지 체크하고 아닌 경우엔 새롭게 ViewHolder를 만드는 것이다.

Written by tocommonlife

2012/08/03 at 09:16

Android에 게시됨

Tagged with ,

Information : 인디음악을 듣자.

leave a comment »

달빛요정의 사건을 보며 씁쓸해하지만 나 역시 가해자였다.

어디서 부터 잘못된 고리인지 모르지만 나 역시 그 고리에 속하는 가해자다.

죄책감은 아니지만 그래도 그들에게 어떤 것이 도움이 될까?

어쩌면 그들을 알리는 것도 좋은 것 아닐까?

죄책감은 아니라고 했지만 그래도 죄책감에 의한 것도 있다.

 

http://blayer.co.kr

저작권은 이미 해결된 사이트이다. 맘껏 들어주고 맘껏 알려보자.

Written by tocommonlife

2010/11/18 at 08:55

Information에 게시됨

GoogleMap : 주소 쿼리 이용하여 마커 표시하기

leave a comment »

http://maps.google.com/maps?q=들어갈말@숫자,숫자&z=18

  • 들어갈말 : 표시될 제목
  • 숫자,숫자 : 위도와 경도
  • z : 줌 레벨로 줌을 어느정도로 표시할지 결정한다.

 

 

참고 : http://mapki.com/wiki/Google_Map_Parameters

Written by tocommonlife

2010/11/12 at 01:59

Information에 게시됨