2016-12-02 96 views
2

我需要在IOS发挥振动小于0.25的第二和玩一个振动为小于0.25的第二振动的序列就会像是有可能在IOS在objc

1振动0.25秒然后3振动0.15秒,并且该循环将持续有限的时间,例如2或3分钟。同时这里需要的精度是指每个振动必须

现在在准确的时间开始时,我玩振动发挥它每秒

-(IBAction)onBtnVibrateClicked:(id)sender { 
    [self.view endEditing:YES]; 

    [myTimer invalidate]; 
    if(_txt_VibrationPerMinute.text.length == 0){ 
     _txt_VibrationPerMinute.text = @"10"; 
    } 
    myTimer = [NSTimer scheduledTimerWithTimeInterval:60/[_txt_VibrationPerMinute.text intValue] 
            target:self 
            selector:@selector(targetMethod:) 
            userInfo:nil 
            repeats:YES]; 
} 

- (IBAction)obBtnStopVibrationClicked:(id)sender { 

    [myTimer invalidate]; 


} 

-(void)targetMethod:(NSTimer *)timer { 
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
} 
+0

根据[this](http://www.kimballlarsen.com/2009/12/22/how-to-make-iphone-vibrate-for-a-long-time/),'AudioServicesPlaySystemSound(kSystemSoundID_Vibrate )'产生0.4秒的振动,所以我认为在短时间内产生振动是不可能的 – spassas

回答

0

恰好一次是的,你可以使用这样的

FOUNDATION_EXTERN void AudioServicesPlaySystemSoundWithVibration(UInt32 inSystemSoundID,id arg,NSDictionary* vibratePattern); 

void vibrate(float durationInSeconds, float intensivity, long count) 
{ 
    NSMutableDictionary* dict = [NSMutableDictionary dictionary]; 
    NSMutableArray* arr = [NSMutableArray array]; 
    for (long i = count; i--;) 
    { 
     [arr addObject:[NSNumber numberWithBool:YES]]; //vibrate 
     [arr addObject:[NSNumber numberWithInt:durationInSeconds*1000]]; 

     [arr addObject:[NSNumber numberWithBool:NO]]; //stop 
     [arr addObject:[NSNumber numberWithInt:durationInSeconds*1000]]; 
    } 

    [dict setObject:arr forKey:@"VibePattern"]; 
    [dict setObject:[NSNumber numberWithFloat:intensivity] forKey:@"Intensity"]; 

    AudioServicesPlaySystemSoundWithVibration(4095,nil,dict); 
}