ইউআইটিেক্সটফিল্ডের প্রাথমিক কীবোর্ড অ্যানিমেশনে সুপার স্লো লেগ / বিলম্ব


169

ঠিক আছে, এই সমস্যাটি আমাকে বাদাম চালিয়ে চলেছে।

আমি আমার স্পর্শ করার পরে কীবোর্ডটি পপ আপ হতে প্রায় 3-4 সেকেন্ড সময় নেয় UITextField। অ্যাপটি চালু হওয়ার পরে কীবোর্ড পপ আপ হওয়ার পরে এটি কেবলমাত্র ঘটে, এরপরে ততক্ষণে অ্যানিমেশনটি শুরু হয়।

প্রথমে আমি ভেবেছিলাম এটি অনেক বেশি ছবি বা আমার লোড করার সমস্যা UITableView, তবে আমি কেবলমাত্র একটি দিয়ে একটি একেবারে নতুন প্রকল্প তৈরি UITextFieldকরেছি এবং আমি এখনও এই সমস্যাটি অনুভব করছি। আমি আইওএস 5, এক্সকোড ভেরি 4.2 এবং আইফোন 4 এস ব্যবহার করছি on

এটি আমার কোড:

#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ভিউটি লোড হওয়ার সাথে সাথে আমি যদি ততক্ষণ ক্লিক করি তবে আমি এখনও সমস্যাটি পাই; আমি যদি পাঠ্য ফিল্ডটি স্পর্শ করার আগে ভিউ লোড হওয়ার পরে 3-4 সেকেন্ড অপেক্ষা করি তবে আমি বিলম্ব পাব না।

উত্তর:


291

এই সমস্যাটি সমাধানের জন্য আপনি কোনও বিদেশী হ্যাক প্রয়োগ করার আগে এটি ব্যবহার করে দেখুন: ডিবাগ সেশনটি বন্ধ করুন, মাল্টিটাস্কিং থেকে অ্যাপটি বন্ধ করুন, কম্পিউটার থেকে আপনার ডিভাইসটি আনপ্লাগ করুন এবং অ্যাপ্লিকেশনটির আইকনটি আলতো চাপ দিয়ে সাধারনত চালান। আমি কমপক্ষে দুটি ক্ষেত্রে দেখেছি যেখানে ডিভাইসটি প্লাগ ইন করা অবস্থায় কেবল বিলম্ব ঘটে।


2
আইফোন 5 চলমান আইওএস 5.1-এ আমার ক্ষেত্রে এটি সঠিক উত্তর ছিল - আমি প্রথম কীবোর্ডের জন্য প্রায় 1 সেকেন্ড বিলম্ব অনুভব করছিলাম।
বেজনবি

7
হ্যাঁ, ল্যাগ কেবলমাত্র ডিবাগ করার সময় ঘটে। রহস্যময়।
পলস

16
ধন্যবাদ. এই সমস্যাটি এখনও আইওএস 9.1 / এক্সকোড 7.1, সুইফট 2.1 এ উপস্থিত রয়েছে।
ইয়ারোস্লাভ

4
এফওয়াইভিএম অ্যাপল, এফওয়াইভিএম। একটি সময়সীমার 90 মিনিটের সময় আমার সহ্য হয় না। আমি যদি 20 টি upvotes। এখনও iOS9.2 / এক্সকোড 7.2
বেসজেন

1
আমার সমস্যাটিও ঠিক এটাই ছিল। আমি আমার ম্যাক থেকে প্লাগ লাগানোর পরে আর দেরি হয়নি (ios9) xcode 7.2
ড্যারেন

148

সুতরাং সমস্যাটি প্রথম ইনস্টলের মধ্যে সীমাবদ্ধ নয় যেমনটি আমি আগে ভেবেছিলাম, তবে অ্যাপটি চালু হওয়ার সাথে সাথেই ঘটে। এখানে আমার সমাধান যা সমস্যাটিকে পুরোপুরি সমাধান করে।

- (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];
}

1
সুন্দর এবং সাধারণ @ ভ্যাডফ - এটি নীচে দেওয়া ইউআইআরএসপন্ডার + কীবোর্ডের উদাহরণের একটি ইনলাইন সংস্করণ
আমেরিকান

4
এটি ওএস দ্বারা পরিচালনা করা উচিত ছিল ... তবে ওহ ভাল: /
চকৃত

9
ধন্যবাদ! দুর্ভাগ্যক্রমে সমস্যা এখনও আইওএস 8 এ রয়ে গেছে, তবে এই কাজটি এখনও তা সমাধান করে
614

1
@ ভ্যাডফ সলিউশন কাজ করে তবে তার 2 মিনিট রয়েছে: 1) আমার কাছে অ্যাপ লোডিংয়ের প্রায় 1 অতিরিক্ত দ্বিতীয়; 2) মেমরি সতর্কতা পেয়েছি (তবে, সমস্ত সময় নয়)। আমি ভিডিডলয়েডে এই কোডটি ইউআইভিউকন্ট্রোলারে যুক্ত করার চেষ্টা করেছি, তবে কোনও ফল হয়নি, সম্ভবত আমি কিছু ভুল করেছি? আপনি যদি নিজের উত্তরটি সম্পাদনা করতে এবং ভিউ কন্ট্রোলারের জন্য কোড যোগ করতে পারেন, যদি এটি সম্ভব হয়।
দিমা ডিপ্লোভ

16
এই সঠিক উত্তর এবং কাজ যে সত্য আমাকে কাঁদিয়ে তোলে। এই হ্যাকটি প্রয়োগ করার পরে আমাকে গোসল করতে হয়েছিল।
বিল বার্গেস

27

হ্যাঁ, আমি সর্বশেষতম আইফোন 4 এস এও কয়েক সেকেন্ড বিলম্ব পেয়েছি। আতঙ্কিত হবেন না। কিছু কারণে, এটি কেবলমাত্র প্রথমবার হয় যখন অ্যাপটি ডিবাগের এক্সকোড থেকে লোড হয়। যখন আমি প্রকাশ করি তখন আমি আর দেরি করি না। এটা শুধু ভুলে যাও...


6
এটা তোলে অপ্টিমাইজেশান লেভেল দেখার কারণে দেওয়া হল: Fastest, Smallest [-Os]। আপনি এটিকে পরিবর্তন করতে পারেনBuild Settings > Optimization Level
কার্লোস রিকার্ডো

20

3
ধন্যবাদ, লিঙ্কগুলির মধ্যে অনেকগুলি বিলম্ব সম্পর্কে "পুরানো আইফোনগুলিতে 1 সেকেন্ড", "3 জি তে লক্ষণীয় নয়" এবং "তাত্ক্ষণিকভাবে নতুন ডিভাইসে লোড" হওয়ার কথা উল্লেখ করে তবে আমি 3-4 বছরের বেশি দীর্ঘ বিলম্ব অনুভব করছি একটি আইফোন 4 এস উপর সেকেন্ড। আমি পরবর্তী কীবোর্ডটি আগে থেকে লোড করার চেষ্টা করব, তবে আমি আশঙ্কা করছি যে অন্য কোনও সমস্যা হতে পারে (সম্ভবত আইওএস 5 বা আমার এক্সকোড ভার?)।
ভাদফ

ইউআইটিেক্সটফিল্ড এবং কীবোর্ড একটি স্থানীয় অ্যাপ্লিকেশনটিতে কীভাবে আচরণ করে আপনি চেষ্টা করেছেন? এই পরীক্ষার জন্য এটি মেমরি থেকে মুছে ফেলার বিষয়ে নিশ্চিত হন (হোম বোতামে 'ডাবল' ক্লিক করুন ...)। আপনার পোস্ট করা কোডের টুকরোটিতে কোনও ভুল নেই এবং 3-4 সেকেন্ডের সত্যই অনেক বেশি - খুব বেশি। আমি কখনই এই প্রিলোডিংয়ের চেষ্টা করি নি তবে দেখতে এটি একমাত্র কাজের মতো।
রোক জার্ক

হ্যাঁ, মানচিত্রের জন্য অনুসন্ধান পাঠ্য ফিল্ডটি প্রবর্তনের পরে ক্লিক করার সাথে সাথেই কীবোর্ডটি উপস্থিত করে। আমি এটিকে স্মৃতি থেকে সরিয়েছি এবং কয়েকবার চেষ্টা করেছি, এটি প্রতিবার তাত্ক্ষণিক। আমি নিশ্চিত না যে আমার এত ধীরতার সাথে কী হবে।
ভাদফ

আমার অ্যাপ্লিকেশনগুলির মধ্যে একটিতে ইউআইটিেক্সটফিল্ড ব্যবহার করা মাত্র একটি পরীক্ষা করেছে - ল্যাগটি সত্যই ন্যূনতম হওয়া উচিত। আপনার পোস্ট করা কোডটি দুর্দান্ত বলে মনে হচ্ছে তাই মূল থ্রেডটি ধরে রেখে অন্য কিছু থাকতে হবে। কুখ্যাত ইনস্ট্রুমেন্টগুলি চালু করার জন্য এটি ভাল সময় হতে পারে।
রোক জার্ক

23
ঠিক আছে, অন্য কারও জন্য যে এই সমস্যাটি বলে মনে হচ্ছে। আমি এক্সকোড থেকে আইফোনটিতে অ্যাপটি আপডেট হওয়ার প্রথম সময়েই এটি আবিষ্কার করেছি। আইফোনটিতে অ্যাপ্লিকেশনটি লোড হয়ে গেলে, অ্যাপ্লিকেশনটির সাথে আর কোনও ব্যবহারের ফলে স্বাভাবিক আচরণের ফলাফল আসবে (আমি কয়েকবার মেমরি থেকে প্রোগ্রামটি সরিয়েছি / নিশ্চিত করার জন্য আমার আইফোনটি পুনরায় শুরু করেছি)।
ভডোফ

18

আপনি সুইডে ভাদফের সমাধানটি ডিডফিনিশলঞ্চিং উইথঅপশনগুলিতে যুক্ত করে ব্যবহার করতে পারেন:

// 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()

এটি আইওএস 8 এ আমার জন্য কাজ করছে।


5

ব্লকের কোডগুলি মূল কাতারে যুক্ত হয়েছে এবং অবিচ্ছিন্নভাবে চালিত হয়। (মূল থ্রেড লক করবেন না)

dispatch_async(dispatch_get_main_queue(), ^(void){
      [textField becomeFirstResponder];
 });

6
এমন একটি পাঠ্য ব্যাখ্যা যুক্ত করার চেষ্টা করুন যা আপনার কোডটি কেন কাজ করে এবং কেবল এটি দেয় না তা বর্ণনা করে যাতে অন্যরা এটি থেকে শিখতে পারে।
টানা স্লেজগাড়ির

7
এই কোডটি আসলে মূল থ্রেডটি ব্লক করে, আপনি মূল কাতারে প্রেরণ করছেন ...
ওয়ার্নার আলটিউইশার

আপনি কি প্রেরণ_কেন্দ্রিক / প্রেরণ_সিন্যাসের মধ্যে পার্থক্য জানেন? এবং আপনি কি মনে করেন [টেক্সটফিল্ড ফার্স্ট রেসপন্ডার হয়ে উঠুন]; মূল থ্রেডের জন্য খুব কঠিন?
সের্গেই পেট্রুক

@ সপ্রেটুক থ্রেড কলিং ডিসপ্যাচ_্যাসেন্সিকে অবরুদ্ধ করা হয়নি, তবে আপনি যে থ্রেডটিতে কোডটি চালিয়েছেন তা অবশ্যই অবরুদ্ধ। একটি একক থ্রেড একবারে দুটি জিনিস করতে পারে না, সুতরাং এই কোডটি মূল থ্রেডটিকে অবরুদ্ধ করে (কারণ প্রেরণ_সাগত_মাইন_কুইয়ের কারণে) তবে থ্রেডটি ব্লক করে না যেখানে ডিসপ্যাচ_সিএনসি বলা হয়।
কেভিন

@ কেভিন তবে কিছু মূল থ্রেড ব্লক করছে এবং ফলস্বরূপ কীবোর্ড অ্যানিমেশন কাজ করছে না। আমি আপনার সাথে একমত, তবে আমার মতামত, অ্যাপ্লিকেশনটিতে পাঠ্য ফাইল সহ সমাধানটি খারাপভাবে গন্ধ পাচ্ছে।
সের্গেই পেট্রুক


1

একটি সম্পর্কিত সমস্যা, যেখানে একটি ইউআইভিউকন্ট্রোলার উপস্থাপনে ধীর হবে, ইউআইটিেক্সটফিল্ডে কাস্টম ফন্টের পরিবর্তে সিস্টেম ফন্ট ব্যবহার করে সমাধান করা হয়েছিল। সম্ভবত সিস্টেম ফন্ট ব্যবহার করাও এই সমস্যার জন্য কাজ করতে পারে?


0

এই বাগটি আইওএস 9.2.1 এ স্থির হয়েছে বলে মনে হচ্ছে। আমার ডিভাইসটি আপগ্রেড করার পরে, আমার ডিভাইসটি যখন আমার কম্পিউটারের সাথে সংযুক্ত থাকে তখন কোনও পাঠ্য ক্ষেত্রটি আলতো চাপতে এবং কীবোর্ড প্রদর্শিত হওয়ার মধ্যে আমার আর দেরি হয় না।


1
এটি আইফোনে স্থির হয়ে গেছে বলে মনে হচ্ছে তবে আইপ্যাডে আমার এখনও পিছিয়ে আছে।
আদারকাস 2302

0

এই নির্বাচিত উত্তরটি iOS 11 এ BAD_EXC ক্র্যাশ ঘটায় - ঠিক করতে অ্যাপ থেকে সরান


-2

ভিউকন্ট্রোলারের ভিউ লোড হয়ে গেলে আপনি কোডের নীচে যুক্ত করতে পারেন ভিউডিড অ্যাপের মতো just শুধু অ্যাপ্লিকেশন নেই: ডিনফিনিশলঞ্চিং উইথঅপশনস:

UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.