我爲我的應用程序,化合物實施了週期表鍵盤。
不要使用UIButtons。
要顯示你的鍵盤,使用: UIViews或CALayers顯示各個鍵
OR
靜態PNG。記憶和「zippier」更容易。 (這是我爲我的未來更新所做的)
您必須使用父視圖跟蹤所有觸摸。 (小拋開添加在底部來解釋爲什麼會是這樣)執行觸摸方法,像這樣:
- (void)touchesBegan: (NSSet *)touches
withEvent: (UIEvent *)event {
NSLog(@"TouchDown");
CGPoint currentLocation = [[touches anyObject] locationInView:self.view];
[self magnifyKey:[self keyAtPoint:currentLocation]];
}
-(void)touchesMoved: (NSSet *)touches
withEvent: (UIEvent *)event {
NSLog(@"TouchMoved");
CGPoint currentLocation = [[touches anyObject] locationInView:self.view];
[self magnifyKey:[self keyAtPoint:currentLocation]];
}
-(void) touchesEnded: (NSSet *)touches
withEvent: (UIEvent *)event{
NSLog(@"TouchUp");
CGPoint currentLocation = [[touches anyObject] locationInView:self.view];
int key = [self keyAtPoint:currentLocation];
[self selectKey:aKey];
}
這些方法拿到鑰匙,並適當地「放大」的選擇鍵。
我對CGRects數組運行該點以確定按鍵(這與點擊測試相比更快)。
- (int)keyAtPoint:(CGPoint)aPoint{
int aKey=1;
for(NSString *aRect in keys){
if(CGRectContainsPoint(CGRectFromString(aRect), aPoint)){
break;
}
aKey++;
}
if(aKey==kKeyOutOfBounds)
aKey=0;
NSLog([NSString stringWithFormat:@"%i",aKey]);
return aKey;
}
- (void)magnifyKey:(int)aKey{
if(aKey!=0) {
if(magnifiedKey==nil){
self.magnifiedKey = [[[MagnifiedKeyController alloc] initWithKey:aKey] autorelease];
[self.view addSubview:magnifiedKey.view];
}else{
[magnifiedKey setKey:aKey];
if([magnifiedKey.view superview]==nil)
[self.view addSubview: magnifiedKey.view];
}
}else{
if(magnifiedKey!=nil)
[magnifiedKey.view removeFromSuperview];
}
}
- (void)selectKey:(int)aKey{
if(magnifiedKey!=nil){
if(aKey!=0){
[magnifiedKey flash];
[self addCharacterWithKey:aKey];
}
[magnifiedKey.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.5];
}
}
有幾種方法可供您實施,但它非常簡單。你基本上正在創造一個放大的關鍵視圖。然後在用戶滑動手指時移動它。
旁白:
因爲一旦觸摸是由一個視圖跟蹤你不能跟蹤與子視圖觸摸,它會繼續跟蹤觸摸到touchesEnded:(或touchesCancelled :)被調用。這意味着,一旦字母「Q」正在跟蹤觸摸,其他鍵就無法訪問該觸摸。即使你在字母「W」上盤旋。這是一種可以在其他地方使用的行爲,但在這種情況下,您必須通過擁有一個「父視圖」來處理它,而「父視圖」的作用是跟蹤觸摸。
(更新修復內存泄漏)
你也可以考慮在努力適應一個5等級系統,如http://stackoverflow.com/a/4667025/676822來完成你想要什麼 – Lucas 2013-01-22 16:50:40