私はMyBgMusic.hと呼ばれるシングルトンクラスを完成させました& MyBgMusic.m。そのシングルトンクラスをSecondViewControllerまたはXIBの残りの部分に参照する方法。ここでiOS:シングルトンクラスから音楽バックグラウンドを参照するには?
は私のシングルトンクラスである:
Hファイル:
#import <Foundation/Foundation.h>
#import <AVFoundation/AVAudioPlayer.h>
@interface MyBgMusic : UIViewController <AVAudioPlayerDelegate> {
AVAudioPlayer *player;
UIButton *playBgMusic;
}
@property (nonatomic, retain) IBOutlet AVAudioPlayer *player;
@property (nonatomic, retain) IBOutlet UIButton *playBgMusic;
+ (id)sharedManager;
-(IBAction) toggleMusic;
@end
Mファイル:
#import "MyBgMusic.h"
static MyBgMusic *sharedMyManager = nil;
@implementation MyBgMusic
@synthesize player,playBgMusic;
#pragma mark -
#pragma mark Singleton Methods
+ (MyBgMusic*)sharedManager {
static MyBgMusic *sharedMyManager;
if(!sharedMyManager) {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedMyManager = [[super allocWithZone:nil] init];
});
}
return sharedMyManager;
}
+ (id)allocWithZone:(NSZone *)zone {
return [self sharedManager];
}
- (id)copyWithZone:(NSZone *)zone {
return self;
}
#if (!__has_feature(objc_arc))
- (id)retain {
return self;
}
- (unsigned)retainCount {
return UINT_MAX; //denotes an object that cannot be released
}
- (id)autorelease {
return self;
}
- (void)dealloc
{
[MyBgMusic release];
[playBgMusic release];
[player release];
[super dealloc];
}
#endif
#pragma mark -
#pragma mark Custom Methods
- (IBAction)toggleMusic {
if ([self.player isPlaying] == YES) {
[self.player stop];
} else {
[self.player play];
}
self.playBgMusic.enabled = YES;
}
- (void)viewDidLoad
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
self.player=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
player.delegate = self;
[player play];
player.numberOfLoops = -1;
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
SecondViewController.m(私は私ができるようにシングルトンクラスから参照したいです)オン/オフを押すときにバックグラウンドミュージックを台無しにすることなく、もう一度それを使用してください。)
- (IBAction)toggleMusic{
if ([self.player isPlaying] == YES) {
[self.player stop];
} else {
[self.player play];
}
self.playBgMusic.enabled = YES;
}
は、私はこのように宣言しなければなりません:
-(IBAction) sharedMusic {
[[MyBgMusic sharedManager] toggleMusic]; // instance method shareManager not found. What does it mean?
}
私はすでにIBActionでこのコードを持っている: - (IBAction)toggleMusic { IF([self.player isPlaying] == YES){ [self.playerストップ]。 } else { [self.player play]; } self.playBgMusic.enabled = YES; } – Amink
このコードを配置する場所:[[MyBgMusic sharedInstance] toggleMusic]; – Amink