0

画像の配列を作成し、次を使用してアニメーション化しました。

imageview.animationImages = images;

imageview.animationDuration = 1;

imageview.animationRepeatCount = 1;

[imageview startAnimating];

これはUIImageViewimageviewオブジェクトへのポインターでimagesあり、配列です。アニメーションを起動するために丸い四角ボタンを使用しています。シミュレーターを開いて初めてア​​ニメーションを実行すると... アニメーションはサウンドと同期しませんが、一度使用した後、もう一度ボタンを押すと同期します。理由はありますか?システム サウンド API を使用して短いサウンドを再生しています。サウンドの を作成し、id次を使用して再生します。

AudioServicesPlaySystemSound(soundID);

私の推測では、アニメーションを初めて起動するとき、シミュレーターは使用している画像を処理して配列を構築するのに時間がかかると思います。合計45枚の画像を使用しています。その結果、サウンドはアニメーション画像よりも先に留まります。しかし、もう一度やってみると、画像はすでに処理されているので、アニメーションとサウンドの両方が同期しています。しかし、これは単なる推測です。私はこれについて何をすべきかわかりません。コード全体を見たい場合は、次のとおりです。

-(IBAction)btnclicked:(id)sender { 
    NSMutableArray *images = [[NSMutableArray alloc]init]; //all alloc does is allocate memory. The -init method is crucial to actually initialize the object into a working state.
    for (int imagenumber = 1; imagenumber <= 45; imagenumber++) {
        NSMutableString *myString = [NSMutableString stringWithFormat:@"%i.png", imagenumber];
        [images addObject:[UIImage imageNamed:myString]];
    }
    CGRect frame = CGRectMake(0.0, 0.0, 320, 460);
    UIImageView *imageview = [[UIImageView alloc] initWithFrame:frame];
    imageview.contentMode = UIViewContentModeScaleToFill;
    imageview.animationImages = images;

    imageview.animationDuration = 3.2;

    imageview.animationRepeatCount = 1;

    [imageview startAnimating];

    [self.view addSubview:imageview];

    AudioServicesDisposeSystemSoundID(soundID);
    NSString *path = [[NSBundle mainBundle] pathForResource:@"giggity stick around" ofType:@"wav"];
    NSURL *url = [NSURL fileURLWithPath:path];
    AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID);
    AudioServicesPlaySystemSound(soundID);
    [imageview release];

}

混乱を避けるために...私の画像には1.png、2.pngなどの名前が付けられているため、配列を作成するときに反復を使用しました。

4

1 に答える 1

0

最善の方法は、-(void)playSound のようなサウンドを再生する関数を作成することです。次に、ボタン アクションで、playSound 関数へのリンクを記述する必要があります: [self playSound]。ここに簡単です:

-(IBAction)XXX:(id)sender
{
    //your imagesArray
    [self playSound];
    imageview.animationDuration = 1;
    imageview.animationRepeatCount = 1;
    [imageview startAnimating];
}

-(void)playSound
{
    //yourcode for playing the sound
}

その助けを願っています。

編集:これを試してください:

-(IBAction)btnclicked:(id)sender { 
NSMutableArray *images = [[NSMutableArray alloc]init]; //all alloc does is allocate memory. The -init method is crucial to actually initialize the object into a working state.
for (int imagenumber = 1; imagenumber <= 45; imagenumber++) {
    NSMutableString *myString = [NSMutableString stringWithFormat:@"%i.png", imagenumber];
    [images addObject:[UIImage imageNamed:myString]];
}
CGRect frame = CGRectMake(0.0, 0.0, 320, 460);
UIImageView *imageview = [[UIImageView alloc] initWithFrame:frame];
imageview.contentMode = UIViewContentModeScaleToFill;

    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/giggity stick around.wav", [[NSBundle mainBundle] resourcePath]]];
soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
soundPlayer.volume = 1;
[soundPlayer play];    

imageview.animationImages = images;

imageview.animationDuration = 3.2;

imageview.animationRepeatCount = 1;

[imageview startAnimating];

[self.view addSubview:imageview];

}

AVFoundation を使用して音声を再生します。今すぐ確認してください。

于 2012-07-14T06:05:20.327 に答える