Existe alguma maneira de dizer o quão difícil a tela está sendo pressionada
Pergunta
Eu quero encontrar a pressão do toque. Só não sei como realizar esse resultado com o jailbreak e obtendo os dados de toque bruto. Alguém sabe como eu faria isso?
Solução
Você não pode obter a pressão do SDK nem Métodos sem documentos. No entanto, você posso Detecte o tamanho do toque com métodos sem documentos.
No Gsevent, que é uma representação de nível inferior de Uievent, há uma estrutura conhecida como GSPATHINFO com membros:
typedef struct GSPathInfo {
unsigned char pathIndex; // 0x0 = 0x5C
unsigned char pathIdentity; // 0x1 = 0x5D
unsigned char pathProximity; // 0x2 = 0x5E
CGFloat pathPressure; // 0x4 = 0x60
CGFloat pathMajorRadius; // 0x8 = 0x64
CGPoint pathLocation; // 0xC = 0x68
GSWindowRef pathWindow; // 0x14 = 0x70
} GSPathInfo;
Notamos que há um pathPressure
e pathMajorRadius
. Posso garantir que o membro da pressão é inútil - isso sempre dá 0. No entanto pathMajorRadius
contém informações significativas - fornece o raio principal do toque em milímetros. Portanto, você pode dar uma estimativa extremamente aproximada se for um toque pesado ou um toque leve do raio.
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
GSEventRef gsevent = [event _gsEvent];
GSPathInfo first_touch = GSEventGetPathInfoAtIndex(gsevent, 0);
if (first_touch.pathMajorRadius >= 9)
NSLog(@"huge (heavy) touch");
else
NSLog(@"little (light) touch");
}
Deixe -me avisá -lo novamente, isso é sem documentos E você não deve usá -lo em aplicativos Appstore.
Editar: em 3.2 e acima do pathMajorRadius
de um gspathinfo também está disponível como um sem documentos Propriedade em Uitouch:
@property(assign, nonatomic, setter=_setPathMajorRadius:) CGFloat _pathMajorRadius;
Portanto, o código acima pode ser reescrito usando o Pure Objective-C:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
UITouch* any_touch = [touches anyObject];
if (any_touch._pathMajorRadius >= 9)
NSLog(@"huge (heavy) touch");
else
NSLog(@"little (light) touch");
}
Outras dicas
A partir do iOS 8.0, UITouch
tem um público majorRadius
propriedade que informa o tamanho aproximado do toque.
No iOS 3.2 e 4.0, você pode obter o valor mais diretamente assim:
UITouch* touch = ...// get the touch object
float radius = [[touch valueForKey:@"pathMajorRadius"] floatValue];
Ainda não é aprovado pela App Store, mas à mão para coisas personalizadas.
Não é possível com o SDK. Ele não expõe esses dados de qualquer maneira. E a tela não sente pressão, e sequer relata que o tamanho do "tamanho" do sistema operacional é desconhecido. Então, infelizmente, o que você está tentando fazer não é possível em um aplicativo legítimo.
Eu sei porque perguntei a mesma coisa: O iPhone pode detectar o tamanho de um toque?