알았어,이 문제는 날 미치게 만들었 어
내를 터치 한 후 키보드가 나타나는 데 약 3-4 초가 걸립니다 UITextField
. 앱이 시작된 후 키보드가 처음으로 팝업 된 후에 만 애니메이션이 즉시 시작됩니다.
처음에는 너무 많은 이미지 또는 내 이미지를로드하는 데 문제가 있다고 생각 UITableView
했지만으로 만 새로운 프로젝트를 만들었지 만 UITextField
여전히이 문제가 발생합니다. iOS 5, Xcode ver 4.2를 사용하고 iPhone 4S에서 실행 중입니다.
이것은 내 코드입니다.
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.delegate = self;
[self.view addSubview:textField];
}
@end
이것이 모든 앱에 공통적 인 문제입니까?
지금 당장 좀 더 나아질 수있는 유일한 방법 textField
은에서 첫 번째 응답자가되거나 사임하는 viewDidAppear
것이지만 문제가 완전히 해결되는 것은 아닙니다.보기가 대신로드 될 때 지연을로드합니다. textField
뷰가로드 될 때 즉시 클릭하면 여전히 문제가 발생합니다. textField를 터치하기 전에보기가로드 된 후 3-4 초를 기다리면 지연이 발생하지 않습니다.
답변
이 문제를 해결하기 위해 이국적인 해킹을 구현하기 전에 다음을 시도하십시오. 디버그 세션을 중지하고, 멀티 태스킹에서 앱을 닫고, 컴퓨터에서 장치의 플러그를 뽑은 후 아이콘을 눌러 정상적으로 앱을 실행하십시오. 장치가 연결되어있는 동안에 만 지연이 발생하는 두 가지 경우를 보았습니다.
답변
따라서 문제는 이전에 생각했던 첫 번째 설치에만 국한된 것이 아니라 앱을 시작할 때마다 발생합니다. 이 문제를 완전히 해결하는 솔루션이 있습니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Preloads keyboard so there's no lag on initial keyboard appearance.
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
}
답변
네, 최신 아이폰 4s도 몇 초 지연되었습니다. 당황하지 마십시오. 어떤 이유로, 앱이 Xcode에서 처음으로 디버그로로드 될 때만 발생합니다. 릴리스했을 때 지연이 발생하지 않습니다. 그냥 잊어 버리세요 …
답변
이것은 알려진 문제입니다.
사전로드 키보드가 유망한 것 같습니다. UIKeyboard 사전로드를 확인하십시오 .
추가 독서 자료 :
UITextField의 초기 iPhone 가상 키보드 표시 속도가 느립니다. 이 해킹이 필요합니까?
답변
didFinishLaunchingWithOptions에 다음을 추가하여 Swift에서 Vadoff의 솔루션을 사용할 수 있습니다.
// Preloads keyboard so there's no lag on initial keyboard appearance.
let lagFreeField: UITextField = UITextField()
self.window?.addSubview(lagFreeField)
lagFreeField.becomeFirstResponder()
lagFreeField.resignFirstResponder()
lagFreeField.removeFromSuperview()
iOS 8에서 나를 위해 일하고 있습니다.
답변
기본 대기열에 추가 된 블록의 코드가 비동기 적으로 실행됩니다. (주실을 잠그지 마십시오)
dispatch_async(dispatch_get_main_queue(), ^(void){
[textField becomeFirstResponder];
});