Имам много странен проблем. Създавам мрежа от UIImageViews (понастоящем 16x16), всеки от които има UILabel върху себе си, който може да съдържа само един символ текст.
Разбрах го, така че когато щракнете върху него, този текст се променя и когато го пуснете, той се променя отново.
Тези UILabels се актуализират правилно и с правилната скорост.
Освен ако не актуализирам и UILabel за „статус“ (от който има само един) за моето приложение.
Този UILabel е значително по-голям от останалите и отново има само един екземпляр. Той се намира в горната част на екрана, а размерът му е широчината на екрана и 40 пиксела височината.
Сега, когато се опитвам да [label setText:] този етикет, той се представя добре и с подходяща скорост... ако щракна върху един от моите UIImageView в горната част на екрана. Въпреки това, когато отида да щракна върху един към долната част на екрана, отнема забележима разлика във времето.
Премахнах всяка итерация през списъци за извличане на UIImageViews. Той изчислява точката, където съм щракнал върху (x, y) цяло число координата, и след това избира подходящия UIImageView от масив чрез [[array objectAtIndex:x] objectAtIndex:y].
Стесних го до основния UILabel за „статус“ като причина за забавянето. Ако коментирам [label setText:] за този етикет и го заменя с разпечатка на NSLog, всичко върви с правилната скорост. И отново се движи с правилната скорост за UIImageViews към горната част на екрана.
Някой има ли предложения? Знам, че определено не итерирам през някакъв списък тук, така че съм малко объркан защо това забавяне се случва само към дъното на мрежата.
Благодаря за помощта!
Малко код:
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touchPoint = [[touches anyObject] locationInView: imageView];
int x = 0;
int y = 0;
x = touchPoint.x/(screenWidth/width);
y = (touchPoint.y - OFFSET)/(screenHeight/height);
if ( [self outOfBoundsWithX:x Y:y] ) {
if ( !isMoving && lastBead != nil ) {
[self releaseBead:lastBead];
}
lastPoint = CGPointZero;
lastBead = nil;
}
else {
if ( !isMoving && lastBead != nil ) {
NSLog(@"TEST");
[self releaseBead:lastBead];
}
else {
Bead * b = [self getBeadAtX:x Y:y];
[self releaseBead:b];
}
}
}
- (void) releaseBead:(Bead*)b
{
[b setGlyph:'c'];
if (statusText == "Test") {
[self setStatus:"Woohoo!"];
else {
[self setStatus:"Text"];
}
}
- (void) setStatus:(char*)status
{
label.text = [NSString stringWithCString:status encoding:NSASCIIStringEncoding];
statusText = status;
}