source

UITextField의 초기 키보드 애니메이션에서 매우 느린 지연/지연

gigabyte 2023. 4. 24. 23:26
반응형

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 키보드 블록이 루프를 실행합니까?

http://www.iphonedevsdk.com/forum/iphone-sdk-development/12114-uitextfield-loooong-delay-when-first-tapped.html

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

반응형