블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
01.C#기초 (4)
02.C#고급 (13)
03.ASP.NET (28)
04.HTML&Script (17)
05.Silverlight (38)
06.C 언어 기초 (2)
07.iOS (14)
08.Java (5)
09.SQL (8)
10.컴퓨터보안 (10)
11.패턴이야기 (3)
12.유니티3D (1)
13.Ubuntu (7)
14.Node.js (6)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday



XCode4를 설치해서 사용중인데...아직은 익숙하지 않다!!
이전에는 프로젝트를 빌드하면 프로젝트 폴더 안에 속한 build폴더에 각각의 빌드버전의 빌드파일들이 생성이 됐는데, XCode4에는 기본적으로 ~/Librar/Developer/Xcode/DerivedData 폴더에 차곡차곡 빌드파일들이 쌓인다. 난 그냥 프로젝트 안에 있는 빌드폴더에 쌓였으면 하는데, 그게 익숙하니깐, 기존의 방법대로 사용하려면 따로 설정을 해줘야한다. 

1. 메뉴바에서 XCode >> Preferences 클릭 한다.




2. Locations 카테고리를 클릭 한다. 그럼 아래 그림과 같이 Build Location 부분에 보면, "Place build products in derived data location (recommended)" 기본 선택되어 있을 것 이다. 이걸 "Place build products in locations specified by targets"으로 변경해 주면 된다. 


프로젝트를 빌드하고 빌드폴더를 열어 보면 정상적으로 파일들이 들어와 있음을 확인 할 수 있을 것 이다. 
Posted by happydong
, |




출처 : http://frontjang.tistory.com/189


MPMovieDurationAvailableNotification

동영상 객체의 총 재생시간을 알아낼 경우 알림이 발생한다. 총 재생시간은 MoviePlayerController.property에 반영된다.

MPMovieMediaTypesAvailableNotification
동영상 객체의 미디어 타입이 파악된 경우 알림이 발생한다. 지원되는 미디어 타입은 MoviePlayerController.movieMediaTypes에 반영된다.

MPMovieNaturalSizeAvailableNotification
동영상 객체의 프레임 사이즈가 처음 파악된 경우, 혹은 그 후에라도 변경된 경우 알림이 발생한다. 프레임 사이즈값은 MoviePlayerController.naturalSize에 반영된다
 
MPMoviePlayerContentPreloadDidFinishNotification
observer에게 동영상이 메모리에 올라가서 재생준비가 완료되었다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 만약 로드중에 오류가 발생한다면 알림 객체의 userinfo는 "error"키에 오류를 서술하는 NSError객체를 가지게 된다 (iOS 3.2 버전부터 Deprecated되었다. 플레이어가 준비되었는지 알고 싶을 경우 이 대신 MPMoviePlayerLoadStateDidChangeNotification notificaton을 사용하라 
 
MPMoviePlayerDidEnterFullscreenNotification
observer에게 동영상 플레이어가 전체화면 모드로 재생이 된다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 사용자의 조작이 notification을 유발할 수 있다
 
MPMoviePlayerDidExitFullscreenNotification
observer에게 동영상 플레이어가 전체화면 모드에서 빠져나왔다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 사용자의 조작이 notification을 유발할 수 있다
 
MPMoviePlayerLoadStateDidChangeNotification
observer에게 네트워크 버퍼링 상태가 변했다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 현재 버퍼링 상태는 MoviePlayerController.loadState에서 확인할 수 있다
* MPMovieLoadState :
MPMovieLoadStateUnknown : 상태를 알 수 없다
MPMovieLoadStatePlayable : 충분한 버퍼가 모여서 재생할 수 있지만, 재생이 끝나기 전에 끊길 수 있다. 
MPMovieLoadStatePlaythroughOK : 충분한 버퍼가 모여서 끊김없이 재생할 수 있다
MPMovieLoadStateStalled : 아직 충분한 버퍼가 모이지 않았기 떄문에 저장된 버퍼 이후에서는 일시정지 될 수 있다.
 
MPMoviePlayerNowPlayingMovieDidChangeNotification
observer에게 재생하는 동영상이 변경되었다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 현재 재생되는 동영상의 주소는 MoviePlayerController.contentURL에서 확인할 수 있다

MPMoviePlayerPlaybackDidFinishNotification
observer에게 동영상의 재생이 끝났다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. userInfo의MPMoviePlayerPlaybackDidFinishReasonUserInfoKey키에는 동영상이 종료된 이유를 나타낸다. 이 notification은 오류로 이노하여 재생이 실패했을때에도 발생한다. 이 notification은 동영상을 전체화면으로 재생하던 중 사용자가 Done버튼을 눌렀을때에는 발생하지 않는다. Done버튼이 눌렸을경우에는 동영상 재생이 일시정지 된 상태에서 전체화면에서 빠져나오기 때문이다. 이런경우에는 MPMoviePlayerDidExitFullscreenNotification등과 같은 notification을 확인해야 한다.
 
MPMoviePlayerPlaybackStateDidChangeNotification
observer에게 동영상 재생상태가 변경되었다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 동영상의 재생상태는 사용자의 행위 혹은 프로그램 로직상에의해 변경될 수 있다. 현재 재생되는 동영상의 상태는 MoviePlayer.playbackState에서 확인할 수 있다
* MPMoviePlaybackState : 
MPMoviePlaybackStateStopped : 동영상이 정지되어있으며, 동영상의 처음부터 재생될것이다
MPMoviePlaybackStatePlaying : 현재 동영상이 재생중이다
MPMoviePlaybackStatePaused : 동영상이 일시정지되었다. 일시정지 된 시점부터 다시 재생될 것이다.
MPMoviePlaybackStateInterrupted : 동영상 재생이 일시적으로 멈추었다. 대개 동영상 버퍼가 부족한 이유이다.
MPMoviePlaybackStateSeekingForward : 동영상 끝을향해 빨리감기중이다
MPMoviePlaybackStateSeekingBackward : 동영상의 처음을 향해 빨리감기중이다.
 
MPMoviePlayerScalingModeDidChangeNotification
observer에게 동영상 플레이어의 scaling mode(화면 크기)가 변경되었다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 사용자의 조작이 notification을 유발할 수있다.
 
MPMoviePlayerThumbnailImageRequestDidFinishNotification
observer에게 동영상 섬네일 제작이 완료되었다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 이 notification에는 MPMoviePlayerThumbnailImageKey와 MPMoviePlayerThumbnailTimeKey키가 있으며, 만약 오류가 발생한 경우 MPMoviePlayerThumbnailErrorKey와 MPMoviePlayerThumbnailTimeKey키를 갖는다.
 
MPMoviePlayerWillEnterFullscreenNotification
observer에게 동영상 플레이어가 전체화면으로 들어가려 한다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 이 notification에는 전체화면으로 들어가기 위한 화면 전환 애니메이션에 대한 키를 갖는데 이 키에 대해서는 Fullscreen Notification Keys 페이지에 기록되어있다. 사용자 조작이 notification을 유발할 수 있다.
 
MPMoviePlayerWillExitFullscreenNotification
observer에게 동영상 플레이어가 전체화면에서 나오려 한다는것을 알린다. 해당 동영상 플레이어는 notification의 인자로 전달된다. 이 notification에는 전체화면에서 나오기 위한 화면 전환 애니메이션에 대한 키를 갖는데 이 키에 대해서는 Fullscreen Notification Keys 페이지에 기록되어있다. 사용자 조작이 notification을 유발할 수 있다.
 
MPMovieSourceTypeAvailableNotification
이 notification은 동영상의 원본 타입에 대해 모르고 있다가 추후에 알게되었을 경우 발생된다. 원본 타입은 MoviePlayerController.movieSource에 반영된다
* movieSource : 이 속성의 기본 값은 MPMovieSourceTypeUnknown이다. 이 속성은 동영상 재생 시스템에게 동영상을 어떻게 다운로드하고 버퍼링 할것인가에 대해서 알려준다. 만약 동영상의 원본타입을 안다면, 이 값을 동영상 재생전에 설정해 주는것이 동영상 버퍼링 시간을 단축시켜 줄 수 있다. 만약 동영상 재생전에 이 값을 직접 설정하지 않는다면 MPMoviePlayerContoller는 정보를 직접 얻어야 하며, 이는 재생시간의 지연을 일으킬 수 있다

출처 : http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html 
Posted by happydong
, |




출처 : http://www.cocoadev.co.kr/126

NSFileManager로 파일과 디텍토리를 복사/이동/삭제하는 간단한 예제 소스입니다. 각 단계는 enter를 로그창에 입력하면 진행되면 아래와 같은 순서로 작업을 합니다.

  1. test 디렉토리 생성
  2. test 디렉토리를 test2로 변경
  3. test.txt 파일을 test2 디렉토리 아래에 new_test.txt로 복사
  4. test2 디렉토리로 이동
  5. new_test.txt를 re_test.txt로 변경
  6. re_test.txt 삭제
  7. 상위 디렉토리로 이동
  8. test2 디렉토리 삭제
테스트 전에 실행파일이 있는 디렉토리에 test.txt란 파일을 vi나 편집기를 이용해 만들어 놓으셔야 합니다.

아래 이미지의 좌측은 Log창에서의 진행화면이며 우측은 터미널에서 진행화면입니다. 터미널에서 확인 후에 로그 창에서 [enter]를 입력하면서 한단계씩 진행합니다.

사용자 삽입 이미지

아래는 소스파일입니다. 별다른 내용이 없으므로 간단한 주석으로 설명을 대치하였습니다.

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSFileManager *FileManager;
    FileManager = [NSFileManager defaultManager];

    /** 현재 디렉토리에서 test란 디렉토리를 생성 */
    if ([FileManager createDirectoryAtPath:@"test" attributes:nil] == NO ) {
        NSLog(@"Fail to create directory");
        return 0;
    }
    NSLog(@"create directory [press return]");
    getchar();
    
    /** 현재 디렉토리에 test.txt 파일이 있는지 검사 */
    if ([FileManager fileExistsAtPath:@"test.txt"] == NO) {
        NSLog(@"test.txt file not exist");
        return 0;
    }
    
    /** 생성된 test 디렉토리를 test2로 변경 */
    [FileManager movePath: @"test" toPath: @"test2" handler:nil];
    NSLog(@"move directory [press return]");
    getchar();
    
    /** test.txt 파일을 test2 밑에 new_test.txt로 복사 */
    [FileManager copyPath: @"test.txt" toPath: @"./test2/new_test.txt"
        handler:nil];
    NSLog(@"copy file [press return]");
    getchar();
    
    /** 현재 디렉토리를 test2로 이동 후에 new_test.txt를 re_test.txt로 변경 */
    [FileManager changeCurrentDirectoryPath: @"test2"];
    [FileManager movePath: @"new_test.txt" toPath: @"re_test.txt"
        handler:nil];
    NSLog(@"move file [press return]");
    getchar();
    
    /** re_test.txt 파일 삭제 */
    [FileManager removeFileAtPath: @"re_test.txt" handler:nil];
    NSLog(@"delete file [press return]");
    getchar();
    
    /** 현재 디렉토리를 이전 디렉토리로 이동후에 test2 디렉토리 삭제 */
    [FileManager changeCurrentDirectoryPath: @".."];
    [FileManager removeFileAtPath: @"test2" handler:nil];
    NSLog(@"delete directory");
    
    [pool release];

    return 0;
}
Posted by happydong
, |