2

コードとタイマーを使用した画像表示機能からObjective-Cで写真を作成する方法を探しています。

つまり、標準の写真アプリと同様のインターフェースが欲しいのですが、ボタンを押した後に写真を撮ってはいけませんが、ボタンはタイマーを開始する必要があります(タイマーから他の値を確認します)。

例を見てみましょう:

  • ボタンを押す

  • タイマーがスタート

  • 値を確認してから1〜2秒後に、写真が撮影されます

  • 写真は自動的にフォトライブラリに保存されます。

  • アプリケーションは他の写真を作成する準備ができています

しかし、私はそれをどのように始めるかについての考えがありません。写真アプリケーションを呼び出すコードの例を見ましたが、多くのアプリがそれを行うのを見ていますが、コードからそれを作るものは何もありません。写真が撮られたら、それは単に保存されるべきです。

どうやってやるの?

4

2 に答える 2

0

UIImagePickerControllerデフォルトのカメラ GUI を表示するために使用します。

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = NO;

showsCameraControlsに設定すると、デフォルトのカメラ コントロールを非表示にできますNO。次に、 を作成し、そのビューにUIViewコントロールと設定を追加して、独自のコントロールを定義できます。cameraOverlayView

UIView *cameraControlsView = [[UIView alloc] initWithFrame:controlsFrame];
UIButton *captureButton = [[UIButton alloc] initWithFrame:buttonFrame];
[captureButton setTitle:@"Capture" forState:UIControlStateNormal];
[captureButton addTarget:self action:@selector(buttonPressed:)        
        forControlEvents:UIControlEventTouchUpInside];
[cameraControlsView addSubview:captureButton];
picker.cameraOverlayView = cameraControlsView;

ユーザーがカスタム キャプチャをタップするUIButtonと、タイマーを開始できます。タイマーが起動したら、検証を行い、takePictureメソッドを使用して画像をキャプチャします。

- (void)buttonPressed:(id)sender {
    [NSTimer scheduledTimerWithTimeInterval:3.0f target:self 
     selector:@selector(timerFired:) userInfo:nil repeats:NO];
}

- (void)timerFired:(NSTimer *)timer {
    if (whateverIsOk) {
        [self.picker takePicture];
    )
}
于 2012-10-02T15:34:59.257 に答える
0

UIImagePickerController クラスには、プログラムで写真を撮るメソッドがあります

-(void)takePicure

画像をフォト ライブラリに保存するには、2 つのオプションがあります。

  1. ALAssetLibrary の使用

    ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init]; [al writeImageDataToSavedPhotosAlbum:user.photo.image metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { }];

  2. void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);

于 2012-10-02T15:35:04.187 に答える