我有一个带有图像的 CALayer,当我触摸它时,它会产生动画效果,它可以工作,非常棒。我现在想做的还有一个声音片段,当你按下相同的图像时播放。我发现这很棘手,因为 CALayer 来自名为 BounceView 的 UIView 类。我在 MainViewController 上创建了一个 BounceView 实例。如果我没有使用正确的术语,我深表歉意。我是否需要将我的音频代码放在我的 MainViewController 中,然后使用委托来允许 BounceView 触发 MainViewController 上的方法?非常感谢任何帮助或指导。
主视图控制器.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>
@interface MainViewController : UIViewController <AVAudioPlayerDelegate>
@property (nonatomic, retain) IBOutlet UIView *BounceView;
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;
- (IBAction)playAudio:(id)sender;
@end
主视图控制器.m
#import "MainViewController.h"
#import "BounceView.h"
@interface MainViewController ()
@end
@implementation MainViewController
@synthesize BounceView;
@synthesize audioPlayer;
- (void)viewDidLoad
{
[super viewDidLoad];
//Setup the audio player
NSURL *noSoundFileURL=[NSURL fileURLWithPath:
[[NSBundle mainBundle]
pathForResource:@"InTheMood" ofType:@"mp3"]];
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:noSoundFileURL error:nil];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (void)loadView
{
NSLog(@"loadView");
// Create a view
CGRect frame = [[UIScreen mainScreen] bounds];
BounceView *v = [[BounceView alloc] initWithFrame:frame];
// Set it as *the* view of this view controller
[self setView:v];
}
- (IBAction)playAudio:(id)sender {
// self.audioPlayer.delegate=self;
[self.audioPlayer play];
}
@end
弹跳视图.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
#import "MainViewController.h"
@interface BounceView : UIView
{
CALayer *myLayer;
}
@end
BounceView.m 如果需要,我将提供此代码,但我不想重载代码。在这里,我创建新层打开(alloc init),给它大小,位置,创建 UIImage,获取底层 CGImage 并将其放在层上,然后创建视图层的子层。
再次,非常感谢任何帮助。