델리게이트를 사용하여 다른보기에서 내 음악 재생을 멈추고 싶습니다. 이미 설정이되어 있고이 옵션이 있다는 것을 알고 있습니다. ...ObjectiveC : Xcode의 다른보기에서 음악 플레이어를 중지하는 방법?
그러나 전 음악을 재생하므로이 기능을 사용하고 싶지 않습니다. 플레이어가 겹치지 않도록 코드를 이미 추가했습니다. 하지만 내 음악을 멈추고 싶을 때 나는 다른 관점에서 그렇게하고 싶다. 위임자가 호출되었지만 작동하지 않을 때 '[player stop];'
함수를 시도했습니다.
아무도 도와 줄 수 있습니까? 고급의 감사합니다 ...
EDIT 여기
내 옵션의 PAGE.H 파일에 대한 코드입니다 :
여기@protocol onHandlerDelegate <NSObject>
- (void)off:(BOOL)success;
- (void)on:(BOOL)success;
-(void)volumeValueChange:(UISlider *)sender;
@end
#import <UIKit/UIKit.h>
@interface OptionsPage : UIViewController{
IBOutlet UISlider *VolumeSlider;
NSTimer *VolumeTimer;
IBOutlet UISwitch *onoroffmusic;
}
-(IBAction) UIBarButtonItem:(id)sender;
-(IBAction) SwitchMusic:(id)sender;
-(IBAction)changevolume:(id)sender;
@property (nonatomic, retain) UISwitch *onoroffmusic;
@property (nonatomic, strong) id<onHandlerDelegate> delegatePpty1;
@end
내 옵션 페이지하는 .m 파일입니다
#import "OptionsPage.h"
#import "ViewController.h"
@interface OptionsPage()
@end
@implementation OptionsPage
@synthesize onoroffmusic;
@synthesize delegatePpty1;
- (IBAction)changevolume:(id)sender{
int volume = VolumeSlider.value;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithInt:volume] forKey:@"volume"];
[defaults synchronize];
[[self delegatePpty1]volumeValueChange:(VolumeSlider)];
}
-(IBAction) SwitchMusic:(id)sender{
if (onoroffmusic.on) {
[[self delegatePpty1] on:YES];
printf("done");
onoroffmusic.on = YES;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"off"];
[defaults setObject:[NSNumber numberWithBool:YES] forKey:@"on"];
[defaults synchronize];
}
else {
/// do nothing
[[self delegatePpty1] off:YES];
printf("off");
onoroffmusic.on = NO;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"on"];
[defaults setObject:[NSNumber numberWithBool:YES] forKey:@"off"];
[defaults synchronize];
ViewController *home = [[ViewController alloc] initWithNibName:nil bundle:nil];
[home.player stop];
}
}
-(IBAction) UIBarButtonItem:(id)sender{
ViewController *Backbutton = [[ViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:Backbutton animated:YES completion:nil];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad{
VolumeSlider.value = 0.3;
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSObject * object = [prefs valueForKey:@"volume"];
if(object == nil){
VolumeSlider.value = 0.3;
}
else{
VolumeSlider.value = [[[NSUserDefaults standardUserDefaults] objectForKey:@"volume"] intValue];
}
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSUserDefaults *defaults2 = [NSUserDefaults standardUserDefaults];
BOOL restoredBoolValue2 = [[defaults2 objectForKey:@"off"] boolValue];
BOOL restoredBoolValue1 = [[defaults2 objectForKey:@"on"] boolValue];
if (restoredBoolValue2) {
////donothing
onoroffmusic.on = FALSE;
}
if (restoredBoolValue1) {
////donothing
onoroffmusic.on = TRUE;
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
위니 n 두 파일 내가 델리게이트와 스위치를 선언합니다. 지금은 그냥 내보기 컨트롤러에 대리자를받을 :
MY VIEWCONNTROLLER .H 파일 : 첫째로 내가
@synthesize player;
다음 확인
: 여기
#import "OptionsPage.h"
@interface ViewController : UIViewController <onHandlerDelegate>{
AVAudioPlayer *player;
}
@property (nonatomic, retain) AVAudioPlayer *player;
@end
는 MY하는 .m 파일입니다 내 대표가 다음을 사용하여 호출 된 경우 :
-(void)volumeValueChange:(UISlider *)sender
{
if (sender.value > 0.3) {
player.volume = sender.value;
}
else{
player.volume = 0.3;
}
}
-(void)on:(BOOL)success{
NSLog(@"Delegate Method Called");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithBool:YES] forKey:@"mykey1"];
[self play];
[player play];
}
-(void)off:(BOOL)success{
NSLog(@"Delegate Method Called");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"mykey1"];
[defaults setObject:[NSNumber numberWithBool:YES] forKey:@"mykey"];
[player stop];
player = nil;
[defaults removeObjectForKey:@"music"];
}
나는 다음이 사용하여 내 nsuserdefults
의 bool
값을로드 :
- (void)viewDidLoad
{
if ([[NSUserDefaults standardUserDefaults] stringForKey:@"mykey"] == nil) {
if ([[NSUserDefaults standardUserDefaults] stringForKey:@"music"] == nil) {
[self play];
}
}
}
NSUserDefaults *defaults2 = [NSUserDefaults standardUserDefaults];
BOOL restoredBoolValue2 = [[defaults2 objectForKey:@"mykey"] boolValue];
if (restoredBoolValue2) {
////donothing
[player stop];
}
BOOL restoredBoolValue1 = [[defaults2 objectForKey:@"mykey1"] boolValue];
if (restoredBoolValue1){
[self play];
}
을 그리고 난 내 플레이 void
기능이 내 응용 프로그램 delegate.m 파일
-(void)play{
if ([[NSUserDefaults standardUserDefaults] stringForKey:@"music"] == nil) {
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/Music.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
player.numberOfLoops = -1;
[player play];
player.volume = 0.3;
player.currentTime = 0.0;
[[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"];
}
else {
[player stop];
}
}
그리고 마지막으로 내가 :
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"music"];
}
이 질문이 Xcode와 관련이 있다고 생각하는 이유는 무엇입니까? – mah