2015-01-06 76 views
0

好吧,让我的应用程序设置在我的应用程序中,以便在单击外部音量按钮时进行阅读。我的问题是,似乎我卡在这,我在我的应用程序两个按钮确定为:iOS音量按钮控制器应用程序按钮

- (IBAction)sendMessage:(id)sender; 
- (IBAction)cancelMessage:(id)sender; 

当我点击我的iPad向上^物理按钮,我希望它与连接起来,

- (IBAction)sendMessage:(id)sender; 

然后用下来的物理按钮,需要连接, - (IBAction)cancelMessage:(id)sender;

这里是我的代码,我是卡上:

#import "FirstViewController.h" 
#import "AppDelegate.h" 
#import "AudioToolbox/AudioServices.h" 
#import <MediaPlayer/MediaPlayer.h> 



@interface FirstViewController() 


@property (nonatomic, strong) AppDelegate *appDelegate; 

-(void)sendMyMessage; 
-(void)didReceiveDataWithNotification:(NSNotification *)notification; 

@end 

@implementation FirstViewController 

// ADDED THIS SECTION------------------------------------------------------------ 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

// ADDED THIS SECTION------------------------------------------------------------ 


int Count=0; 

- (void)viewDidLoad 
{ 
// ADDED THIS SECTION------------------------------------------------------------ 


    UISwitch *switcher = [[UISwitch alloc] init]; 
    switcher.center = self.view.center; 
    [switcher addTarget: self action: @selector(volumeListener_onOff:) forControlEvents:UIControlEventValueChanged]; 
    [self.view addSubview:switcher]; 

// ADDED THIS SECTION------------------------------------------------------------ 



    [super viewDidLoad]; 



    // Do any additional setup after loading the view, typically from a nib. 

    _appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    _txtMessage.delegate = self; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(didReceiveDataWithNotification:) 
               name:@"MCDidReceiveDataNotification" 
               object:nil]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 



// ADDED THIS SECTION------------------------------------------------------------ 
// ADDED THIS SECTION------------------------------------------------------------ 

- (void) volumeListener_onOff:(id)sender 
{ 
    UISwitch *onOff = (UISwitch *) sender; 

    if(onOff.on){ 
     volumeListener = [[VolumeListener alloc] init]; 
     [[self.view viewWithTag:54870149] removeFromSuperview]; 
     [self.view addSubview: [volumeListener dummyVolume]]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil]; 
    } 
    else{ 
     [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil]; 
     [[self.view viewWithTag:54870149] removeFromSuperview]; 
    } 
} 


// ADDED THIS SECTION------------------------------------------------------------ 
// ADDED THIS SECTION------------------------------------------------------------ 


- (void)volumeChanged:(NSNotification *)notification{ 
    if(volumeListener.runningVolumeNotification==FALSE){ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      volumeListener.runningVolumeNotification = TRUE; 
      MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; 
      [musicPlayer setVolume:volumeListener.systemVolume]; 

      // do what you want to accomplish here 
      [self.view setAlpha:0.0f]; 
      [UIView beginAnimations:@"flash screen" context:nil]; 
      [UIView setAnimationDuration:0.1f]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
      [self.view setAlpha:1.0f]; 
      [UIView commitAnimations]; 

      dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
       volumeListener.runningVolumeNotification = FALSE; 
      }); 
     }); 
    } 
} 

// ADDED THIS SECTION------------------------------------------------------------ 
// ADDED THIS SECTION------------------------------------------------------------ 

#pragma mark - UITextField Delegate method implementation 

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    [self sendMyMessage]; 
    return YES; 
} 


#pragma mark - IBAction method implementation 

- (IBAction)sendMessage:(id)sender { 
    [self sendMyMessage ]; 
} 

- (IBAction)cancelMessage:(id)sender { 
    [self sendMyadditionMessage ]; 
} 


#pragma mark - Private method implementation 

// THIS IS THE SECTION FOR ADDITION ---------------------------------------------------------- 
// --------------------------------------------------------------------------------------------- 
// --------------------------------------------------------------------------------------------- 

-(void)sendMyMessage{ 


    NSData *dataToSend = [_txtMessage.text dataUsingEncoding:NSUTF8StringEncoding]; 
    NSArray *allPeers = _appDelegate.mcManager.session.connectedPeers; 
    NSError *error; 

    [_appDelegate.mcManager.session sendData:dataToSend 
            toPeers:allPeers 
            withMode:MCSessionSendDataReliable 
             error:&error]; 

    if (error) { 
     NSLog(@"%@", [error localizedDescription]); 
    } 

    [_tvChat setText:[_tvChat.text stringByAppendingString:[NSString stringWithFormat:@"\n%@\n\n", _txtMessage.text]]]; 
    [_txtMessage setText:@""]; 

    // THIS IS WHAT STARTS THE COUNT FOR THE TEXT 
    NSString *numValue = [[NSString alloc] initWithFormat:@"%d", Count--]; 
    _txtMessage.text = numValue; 
    // END CODE FOR COUNT 

} 


// START SECTION FOR ADDITION --------------------------------------------------------------- 
// --------------------------------------------------------------------------------------------- 
// --------------------------------------------------------------------------------------------- 

-(void)sendMyadditionMessage{ 
    NSData *dataToSend = [_txtMessage.text dataUsingEncoding:NSUTF8StringEncoding]; 
    NSArray *allPeers = _appDelegate.mcManager.session.connectedPeers; 
    NSError *error; 

    [_appDelegate.mcManager.session sendData:dataToSend 
            toPeers:allPeers 
            withMode:MCSessionSendDataReliable 
             error:&error]; 

    if (error) { 
     NSLog(@"%@", [error localizedDescription]); 
    } 

    [_tvChat setText:[_tvChat.text stringByAppendingString:[NSString stringWithFormat:@"\n%@\n\n", _txtMessage.text]]]; 
    [_txtMessage setText:@""]; 

    // THIS IS WHAT STARTS THE COUNT FOR THE TEXT 
    NSString *numValue = [[NSString alloc] initWithFormat:@"%d", Count++]; 
    _txtMessage.text = numValue; 
    // END CODE FOR COUNT 


    if(Count == 3) { 
     return [self vibrate]; 
    }; 
} 


// END SECTION FOR ADDITION --------------------------------------------------------------- 
// --------------------------------------------------------------------------------------------- 
// --------------------------------------------------------------------------------------------- 

-(void)vibrate 
{ 
    NSLog(@"I'm vibrating"); 
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
} 


-(void)didReceiveDataWithNotification:(NSNotification *)notification{ 
    MCPeerID *peerID = [[notification userInfo] objectForKey:@"peerID"]; 
    NSString *peerDisplayName = peerID.displayName; 

    NSData *receivedData = [[notification userInfo] objectForKey:@"data"]; 
    NSString *receivedText = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

    [_tvChat performSelectorOnMainThread:@selector(setText:) withObject:[_tvChat.text stringByAppendingString:[NSString stringWithFormat:@"%@ wrote:\n%@\n\n", peerDisplayName, receivedText]] waitUntilDone:NO]; 
} 

@end 
+0

不,你不能这样做。 – Fogmeister

+4

忽略您之前问题的答案不会改变结果。 http://stackoverflow.com/questions/27786923/physical-volume-control-buttons-assigned-to-ios-app-buttons – Fogmeister

+0

请将您的问题中的代码缩小到相关代码(音量按钮事件和两种方法你想打电话 – rmaddy

回答

1

我可以提一个建议?使用RBVolumeButtons,这是一个开放源代码类,可让您轻松窃取音量按钮。我在我的应用程序中使用它,它完美地工作。如果您对如何使用它有任何疑问,请告诉我。

+0

你可以分享你如何使用它?我无法让它工作。例如。你在哪里创建'RBVolumeButtons'对象?在'viewWillAppear'或'viewDidLoad'中? –