UITextField의 초기 키보드 애니메이션에서 매우 느린 지연/지연
좋아, 이 문제 때문에 미치겠어.
키보드를 터치한 후 키보드가 뜨는 데 약 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초 정도 기다리면 지연이 발생하지 않습니다.
이 문제를 피하기 위해 이색 해킹을 구현하기 전에 다음과 같이 하십시오. 디버깅 세션을 중지하고, 앱을 멀티태스킹에서 종료하고, 기기를 컴퓨터에서 분리한 후 해당 아이콘을 눌러 앱을 정상적으로 실행합니다.디바이스가 접속되어 있는 동안에만 지연이 발생하는 경우는 적어도2건 있습니다.
이 문제는 당초 생각했던 것처럼 첫 번째 설치에만 국한된 것이 아니라 앱을 실행할 때마다 발생합니다.여기 이 문제를 완벽하게 해결하는 솔루션이 있습니다.
- (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];
}
네, 최신 아이폰4도 몇 초 지연됐어요.진정하라구.어떤 이유로 인해 앱이 디버깅의 Xcode에서 처음 로드될 때만 발생합니다.Release 했을 때는 딜레이가 안 돼요.그냥 잊어버려...
이것은 이미 알려진 문제.
키보드의 프리로드가 유망할 것 같습니다.[UIKeyboard 프리로드]체크박스를 켜겠습니다
일부 추가 읽기 자료:
UITextField의 경우 아이폰 가상 키보드 초기 표시가 느립니다.이 해킹이 필요한가요?
로드하는 동안 UITextField 키보드 블록이 루프를 실행합니까?
Swift에서 Vadoff 솔루션을 사용하려면 didFinishLaunchingWithOptions에 다음을 추가합니다.
// 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()
iOS8에서는 동작하고 있습니다.
블록 내 코드가 메인 큐에 추가되어 비동기적으로 실행됩니다.(메인 스레드를 잠그지 않음)
dispatch_async(dispatch_get_main_queue(), ^(void){
[textField becomeFirstResponder];
});
이 답을 보세요.이들은 UIResponder+KeyboardCache를 제안합니다.심플하고 멋져요.iOS 7에서 테스트 완료.
UIViewController가 느리게 표시되는 관련 문제는 UITextField의 커스텀 글꼴 대신 시스템 글꼴을 사용하여 해결되었습니다.이 문제에는 시스템 폰트를 사용하는 것도 문제가 되지 않을까요?
이 오류는 iOS 9.2.1에서 해결된 것 같습니다.단말기를 업그레이드한 후 단말기가 컴퓨터에 연결되어 있을 때 텍스트 필드를 누르고 키보드가 나타날 때까지의 지연 시간이 없어졌습니다.
이 선택된 답변으로 인해 iOS 11에서 BAD_XC 크래시가 발생합니다. 수정하려면 앱에서 삭제하십시오.
viewController의 뷰가 로드되었을 때 viewDidAppear와 같이 아래 코드를 추가할 수 있습니다.어플리케이션뿐만 아니라 : Finish Launching With Options :
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
언급URL : https://stackoverflow.com/questions/9357026/super-slow-lag-delay-on-initial-keyboard-animation-of-uitextfield
'source' 카테고리의 다른 글
Azure DevOps 파이프라인의 여러 단계에서 변수 공유 (0) | 2023.04.24 |
---|---|
SQL Server에서 동일한 예외를 다시 던지는 방법 (0) | 2023.04.24 |
iOS 8에서 위치 서비스가 작동하지 않음 (0) | 2023.04.24 |
시스템 변환그림그리기.아이콘에서 시스템으로Media.ImageSource (0) | 2023.04.24 |
ASP에서 웹 앱의 기본 URL을 얻으려면 어떻게 해야 합니까?NET MVC? (0) | 2023.04.24 |