У меня очень странная проблема. Я создаю сетку UIImageViews (в настоящее время 16x16), каждая из которых имеет UILabel, которая может содержать только один символ текста.Медленное обновление 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;
}
Опубликовано код. Пожалуйста, дай мне знать, что ты думаешь. Bead - это мой UIImageView и ярлык - это UILabel для основного приложения. Каждый бит содержит небольшой UILabel, который содержит один символ и устанавливается через функцию [bead setGlyph:]. – pantaryl
На симуляторе он отлично работает ... на устройстве, однако, нет. Почему, по вашему мнению, проблема с TouchPoint может быть проблемой? – pantaryl