2015-12-15 4 views
0

Я хочу измерить силу нажатия при нажатии или перетаскивании кнопки. я создал UITapGestureRecognizer (для отведения) и добавили его в MyButton так:Как добавить 3dtouchforce в UIButton?

UITapGestureRecognizer *tapRecognizer2 = [[UITapGestureRecognizer  alloc] initWithTarget:self action:@selector(buttonPressed:)]; 

     [tapRecognizer2 setNumberOfTapsRequired:1]; 
     [tapRecognizer2 setDelegate:self]; 
     [myButton addGestureRecognizer:tapRecognizer2]; 

я создал метод, называемый buttonPrssed так:

-(void)buttonPressed:(id)sender 
{ 
    [myButton touchesMoved:touches withEvent:event]; 


    myButton = (UIButton *) sender; 

    UITouch *touch=[[event touchesForView:myButton] anyObject]; 

    CGFloat force = touch.force; 
    forceString= [[NSString alloc] initWithFormat:@"%f", force]; 
    NSLog(@"forceString in imagePressed is : %@", forceString); 

} 

я получаю нулевые значения (0.0000) для трогают. любая помощь или совет будут оценены. Я выполнил поиск и нашел проект DFContinuousForceTouchGestureRecongnizer, но нашел его слишком сложным. Я использую iPhone 6 Plus с сенсорным экраном. я также может измерять контакт, когда нажав на любой другой области на экране, но не на кнопки, используя этот код:

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 

    UITouch *touch = [touches anyObject]; 

    //CGFloat maximumPossibleForce = touch.maximumPossibleForce; 
    CGFloat force = touch.force; 
    forceString= [[NSString alloc] initWithFormat:@"%f", force]; 
    NSLog(@"forceString is : %@", forceString); 




} 

ответ

0

Вы получаете 0.0000 в buttonPressed потому, что пользователь уже поднял свой палец, когда это называется.

Вы правы, что вам нужно получить силу в методе touchesMoved, но вам нужно получить его в методе UIButton touchesMoved. Из-за того, что вам нужно подкласс UIButton и переопределить его touchesMoved метод:

Заголовочный файл:

#import <UIKit/UIKit.h> 

@interface ForceButton : UIButton 

@end 

Реализация:

#import "ForceButton.h" 

@implementation ForceButton 

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 

    UITouch *touch = [touches anyObject]; 
    CGFloat force = touch.force; 
    CGFloat relativeForce = touch.force/touch.maximumPossibleForce; 

    NSLog(@"force: %f, relative force: %f", force, relativeForce); 
} 

@end 

Кроме того, нет необходимости использовать UITapGestureRecognizer, чтобы обнаруживать однократное нажатие на UIButton. Используйте вместо этого addTarget.

+0

thx joern, попробуй его и сообщит ... –

+0

Joern, я последовал за твоими шагами и создал forceButton как подкласс UIButton. кнопка, которую я хочу измерить силой касания, называется myButton. Я добавил цель: [myButton addTarget: self action: @selector (buttonClicked :) forControlEvents: UIControlEventTouchUpInside]; Я создал метод под названием - (void) buttonPressed: (id) отправитель , но как я могу вызвать метод touchsMoved from forceButton внутри buttonPressed? –

+0

@JeffSab: Вы никогда не называете 'touchhesMoved' себя. Этот метод будет автоматически вызываться системой всякий раз, когда пользователь прикасается к кнопке, а палец немного движется во время этого касания (что всегда на самом устройстве). – joern

Смежные вопросы