2010-03-25 6 views
8

Tôi đã gặp một số vấn đề với việc gọi số -becomeFirstResponder trên UITextField có bộ điều khiển chế độ xem được trình bày theo phương thức. Tôi gọi phương thức này trong phương thức -viewDidLoad của bộ điều khiển chế độ xem để bàn phím được hiển thị ngay lập tức. Những gì tôi mong đợi là cho cả bàn phím và bộ điều khiển chế độ xem để hoạt ảnh từ dưới cùng của màn hình cùng một lúc. Tuy nhiên, những gì tôi đang quan sát như sau:Các vấn đề về hoạt ảnh bàn phím Khi gọi trở thànhFirstResponder trong Bộ điều khiển chế độ xem phương thức

  1. Có một ~ 0,2 lag UI thứ hai giữa cách nhấn vào nút đó gọi phương thức -presentModalViewController:animated: trên bộ điều khiển xem cha mẹ và khi điều khiển xem đứa trẻ bắt đầu để animate modally.
  2. Bàn phím được hiển thị ngay lập tức hoàn toàn không có hoạt ảnh ngay khi hoạt ảnh của chế độ xem của bộ điều khiển chế độ bắt đầu.
  3. Khi hoạt ảnh của bộ điều khiển chế độ xem hoàn tất, mọi thứ khác có vẻ hoạt động trơn tru.
  4. Loại bỏ bộ điều khiển chế độ xem phương thức khiến màn hình tắt động trơn tru (cùng với bàn phím, tình cờ).
  5. Nhấp vào nút trình bày bộ điều khiển chế độ xem bất kỳ lúc nào sau lần đầu tiên kết quả trong cùng một mẫu ngoại trừ việc không có độ trễ UI 0,2 giây.

Giống như hoạt ảnh của bàn phím và hoạt ảnh của bộ điều khiển chế độ xem đều cạnh tranh với một số tài nguyên Hoạt ảnh lõi cấp thấp hơn cùng một lúc, nhưng tôi không hiểu tại sao điều này xảy ra. Hơn nữa, có vẻ để chứng thực linh cảm này là nếu tôi không yêu cầu UITextField trở thành người trả lời đầu tiên (nghĩa là nếu tôi không yêu cầu bàn phím tự trình bày), thì hoàn toàn không có giao diện người dùng và trình điều khiển chế độ xem hoạt hình ngay lập tức.

Điều thú vị là nếu tôi làm điều gì đó giống như [self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001]; thì hoạt ảnh của bàn phím sẽ xảy ra gần như cùng lúc với hoạt ảnh của bộ điều khiển chế độ xem - rất khó để biết rằng chúng không được hoạt ảnh cùng một lúc khi chạy trên iPhone Simulator. Tuy nhiên, khi chạy trên một thiết bị thực tế, nó dễ dàng nhận thấy rằng bàn phím không xuất hiện cho đến sau khi bộ điều khiển xem phương thức được trình bày. Quan trọng hơn, mặc dù, không có độ trễ giao diện người dùng nào khác.

Có ai có kinh nghiệm về điều này không?

+0

Bạn đã thử sử dụng UIImageView của bàn phím trong hoạt ảnh để tạo hình dạng mong muốn một cách giả tạo? –

+0

Trên iPhone 6s với iOS 9.3.2 Tôi hài lòng với cách bàn phím hoạt hình, nhưng tôi quan sát thấy sự chậm trễ này lần đầu tiên tôi gọi trở thànhFirstResponder từ viewDidLoad, quá. Sau một số thử nghiệm, tôi phát hiện ra rằng bản trình bày bàn phím đầu tiên sau khi khởi chạy ứng dụng bị trì hoãn, bất kể nó được kích hoạt như thế nào. Và sự chậm trễ này chỉ xảy ra khi trình gỡ lỗi được đính kèm. –

Trả lời

4

Tôi tin rằng bạn đang gặp sự cố vì bạn đang sắp xếp hoạt ảnh hiệu quả. Chế độ xem bàn phím được bao gồm bởi chế độ xem phương thức. Chế độ xem bàn phím đang cố gắng tạo hoạt ảnh cho trang trình bày của nó trong quá trình chuyển đổi trong ngữ cảnh của chế độ xem tự tạo hoạt ảnh cho trang trình bày trong quá trình chuyển đổi. Hoạt ảnh bàn phím đang cố gắng nhấn mục tiêu di chuyển.

Tạm dừng có nhiều khả năng là thời gian chạy của hoạt ảnh chuyển đổi bàn phím. Tôi khá chắc chắn rằng hoạt ảnh trên bàn phím thu thập mức độ ưu tiên từ các hoạt ảnh khác để có thể thúc đẩy sắp xếp lại giao diện người dùng, ví dụ: di chuyển một bảng để bàn phím không che phủ hàng của bảng đã chỉnh sửa. Trong mọi trường hợp, hoạt ảnh bàn phím xuất hiện trong ngữ cảnh của superview. Điều này đặc biệt đúng trong trường hợp của chế độ xem phương thức.

Vì vậy, chế độ xem bàn phím tự động hoạt hình trượt nhưng vì trình giám sát chưa thực sự hiển thị, bạn không thấy gì cả. Khi người giám sát không trượt vào, bàn phím đã có mặt vì hoạt ảnh của nó đã được hoàn thành trước khi người giám sát bắt đầu hoạt ảnh của nó.

Tóm lại, tôi không nghĩ rằng bạn có thể thực sự đạt được những gì bạn muốn làm. Thay vào đó, tôi nghĩ bạn sẽ phải tạo hiệu ứng chuyển đổi chế độ xem phương thức trước, sau đó chạy hoạt ảnh bàn phím hoặc bạn sẽ phải chấp nhận có bàn phím hiển thị ngay lập tức.

Tôi nghĩ rằng đề xuất của Cirrostratus ở trên là tốt nhất. Sử dụng hình ảnh của bàn phím sẽ trượt với chế độ xem phương thức và sau đó ngay lập tức hoán đổi nó bằng bàn phím thực.

+0

Cảm ơn câu trả lời của bạn. Tôi nghi ngờ nhiều, nhưng tôi muốn chắc chắn rằng tôi không chỉ điên rồ. Vấn đề với đề xuất của Cirrostratus là bàn phím sẽ vẫn hoạt ảnh một khi trường văn bản trở thành người trả lời đầu tiên. Điều này có vẻ kỳ lạ bởi vì hình ảnh đã có đó mang lại cho ảo giác của bàn phím đang có mặt. Nếu có một cách để trình bày bàn phím ngay lập tức mà không làm động nó, sẽ không có vấn đề gì. Tôi sẽ cố gắng tìm ra thứ gì đó. Cảm ơn! – LucasTizma

0

Hãy thử di chuyển mã của bạn gửi trở thànhKhông có phản hồi ngoài tầm nhìnDidLoad và vào chế độ xemWillAppear. Tôi nghĩ rằng nó đang bắt đầu quá sớm, bạn muốn hoạt ảnh bàn phím xảy ra khi chế độ xem hoạt ảnh xuất hiện xảy ra.

+1

Tôi thực sự đã thử điều đó nhưng điều tương tự vẫn xảy ra. – LucasTizma

0

Bạn có nói rằng bạn đang thấy sự chậm trễ trên Trình mô phỏng chứ không phải trên thiết bị? Nếu đó là trường hợp bạn có thể nhìn thấy một tụt hậu do máy tính của bạn dùng nó là thời gian tải tất cả mọi thứ vào bộ nhớ. Khi tải lên Simulator lần đầu tiên nó không chỉ chạy mã nguyên bản, nó có thể tải tất cả các cách thức của thời gian chạy và gỡ lỗi thư viện. Sau khi được nạp vào bộ nhớ, hệ thống có thể khá nhanh. Nếu bạn đang gặp khó khăn lag trên Simulator có thể một số RAM nhiều hơn trong máy dev của bạn có thể giúp đỡ. Nếu máy của bạn là một vài năm tuổi bạn có thể nghĩ về việc đi cho một cái gì đó mới.

+1

Sự cố xảy ra cả trên thiết bị và trong Trình mô phỏng iPhone. Nó chỉ là không rõ ràng trên iPhone Simulator bởi vì nó nhanh hơn. – LucasTizma

0

Đây là những gì tôi đã làm để làm cho bàn phím xuất hiện để animate chính xác thời gian giống như một modalviewcontroller:

Trong phương thức (init) về quan điểm được trình bày modally, tôi đã tạo ra UITextField và làm cho nó là người đầu tiên trả lời. Sau đó, khi tôi trình bày các bộ điều khiển xem phương thức với hình ảnh động cả hai đều xuất hiện cùng một lúc.

1

Hoạt ảnh bàn phím bị trì hoãn cũng làm phiền tôi. viewDidLayoutSubviews là phương pháp kỳ diệu mà tôi đang tìm kiếm. Đặt cuộc gọi becomeFirstResponder ở đó làm cho bàn phím trượt lên theo thời gian với phương thức.

https://stackoverflow.com/a/19517739/3618864