У меня очень странная проблема. Я создаю сетку UIImageViews (в настоящее время 16x16), каждый из которых имеет UILabel, который может содержать только один символ текста.
У меня так при нажатии на нее этот текст меняется и при отпускании меняется снова.
Эти UILabels обновляются корректно и с нужной скоростью.
Если я также не обновлю UILabel «статуса» (из которого есть только один) для своего приложения.
Этот UILabel значительно больше других и опять же имеет только один экземпляр. Он расположен в верхней части экрана, а его размер равен ширине экрана и 40 пикселям в высоту.
Теперь, когда я пытаюсь [label setText:] эту метку, она работает нормально и с надлежащей скоростью... если я нажимаю на один из моих UIImageViews в верхней части экрана. Однако, когда я иду, чтобы щелкнуть по одному в нижней части экрана, это занимает заметную разницу во времени.
Я удалил любую итерацию по спискам для получения 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;
}