Taymer va animatsiya hodisalari TouchesEnded voqealaridan ustun turadi

Men TouchesBegan haddan tashqari yuklanishida birinchi marta o'rnatgan NSTimer yordamida teginish va ushlab turish moslamasini amalga oshirdim.

Biroq, men xohlagan narsa, teginish ushlab turganda, doimiy ravishda tez olov ketma-ketlikda bajariladigan harakatdir. Shunday qilib, taymer tugashi bilan men ishni bajarish uchun ishlov beruvchini chaqiraman, u keyin boshqa taymerni o'rnatadi va tsikl TouchesEnded kirib, uni bekor qilmaguncha yoki boshqa tugatish sharti bajarilmaguncha davom etadi.

Bu mening ishlovchi kodim bir vaqtning o'zida o'chirish uchun animatsiyani ishga tushirmaguncha yaxshi ishlaydi. Endi bizda animatsiya hodisalari va taymer hodisalari o'chib ketadi va biz TouchesEnded bilan ishlashimiz kerak.

Men topayotgan narsa shundan iboratki, agar animatsiya ishga tushirilsa va men taymerimni 0,025 soniyadan kamroq vaqtga qo'ygan bo'lsam, TouchesEnded hodisasi taymer aylanishi to'xtamaguncha (boshqa tugatish sharti) amalga oshmaydi. Sekinroq taymerni o'rnatish yoki animatsiyani ishga tushirmaslik, uni ishlashiga imkon bering (TouchedEnded darhol keladi), lekin men xohlagan narsa emas.

Shubhasiz, bularning barchasi qurilmada (chiqarish tuzilishi - NSLogs yo'q) - simda hammasi yaxshi ishlaydi

Ushbu hodisalarning nisbiy ustuvorligini belgilashning biron bir usuli bormi - yoki men bu erda aniq bir narsani etishmayapmanmi?

[Update]

Men bu misolda uzluksiz qismni bajarilgunga qadar vizual aloqasiz bajarish orqali ishladim (bu foydalanuvchilar nuqtai nazaridan bir zumda). Menimcha, bu hozircha yaxshi. Men hali ham bu haqda boshqa fikrlarni eshitishni xohlayman (Jeffrining g'oyasi yaxshi edi), lekin men hozir kutayotganim yo'q.


person philsquared    schedule 30.10.2008    source manba
comment
Teglarni o'zgartirganingiz uchun tashakkur, Kris - bu ko'proq odamlarga savolni ko'rishga yordam berishi mumkin.   -  person philsquared    schedule 31.10.2008


Javoblar (1)


O'zingizning Timer tipidagi sinfingizni ipga chiqarish orqali yozishga harakat qiling. Misol:

BOOL continue = YES; //outside of your @implementation

-(void)doLoop
{
   while(continue){
      [NSThread sleepForTimeInterval:.025];
      [self performSelectorOnMainThread:@selector(whateverTheFunctionIs) waitUntilDone:YES];
    }
}

va bu [NSThread detatchNewThreadSelector:@selector(doLoop) toTarget:self withObject:nil] tomonidan boshlanadi. Bu mutlaqo xavfsiz emas, lekin siz mantiqiyni NSNumberga o'rashni tanlashingiz mumkin va agar xohlasangiz, @synchronize qiling. Shu bilan bir qatorda, men o'sha kichik parchani yozganimdan so'ng, sleepForTimeInterval o'rniga joriy NSTime bilan tekshirish yaxshiroq ekanini tushundim: lekin siz fikrni tushundingiz. :)

person Jeffrey Forbes    schedule 31.10.2008
comment
Rahmat Jeffri. Bu men izlayotgan javobmi yoki yo'qmi, ishonchim komil emas, lekin bu, albatta, sinab ko'rishga arziydigan narsa va men shu tarzda ustuvorlikni biroz nazorat qila olaman - garchi animatsiya uchun hali ham shunday bo'lmasa ham. Buni hozircha ochiq qoldiraman - lekin javobingiz uchun tashakkur (va sizga ovoz berdi). - person philsquared; 01.11.2008