У меня есть UIImageView с методом для изменения изображения, которое он отображает. Он работает нормально, если метод запускается из события касания, полученного самим UIImageView, но тот же метод не может обновить UIImageView, если вызывается из другого объекта, который вызвал событие касания. У меня есть вызов NSLog в рассматриваемом методе и, таким образом, я вижу, что метод вызывается в обоих случаях. Но только в одном случае я вижу фактическое изменение изображения, в другом случае вид не обновляется.
Когда это работает, мне не нужно устанавливать setNeedsDisplay или setNeedsLayout, но это то, что я пытался решить проблему. Установка needsDisplay и needsLayout в UIImageView, а также в его суперпредставлении. Но безрезультатно. Я вижу, что изображение действительно изменяется, если я поворачиваю устройство, которое вызывает обновление, и я вижу, что UIImageView действительно изменился.
Суперпредставление вызывает метод eventAtLocation: для коллекции OutletCollection с использованием makeObjectsPerformSelector: withObject:
Конечно, это выглядит как смущающая ошибка с моей стороны, но я не могу понять это с нескольких часов. У меня заканчиваются идеи, что попробовать: - (
Вот код, о котором идет речь:
- (void)eventAtLocation:(NSValue *)location
{
CGPoint loc = [self.superview convertPoint:[location CGPointValue] toView:self];
if ([self pointInside:loc withEvent:nil]) {
if (!self.isAnimating) {
[self autoSwapImage];
}
}
else{
if (self.isAnimating) {
[self cancelAnimation];
}
}
}
- (void)cancelAnimation
{
self.isAnimating = NO;
[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
- (void) swapImage
{
currentImage++;
if (currentImage > numberOfImages)
currentImage = 1;
NSLog(@"set image to %i", currentImage);
self.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%i.jpg", currentImage]];
[self setNeedsDisplay];
}
- (void) autoSwapImage
{
self.isAnimating = YES;
[self swapImage];
[self performSelector:@selector(autoSwapImage) withObject:self afterDelay:0.1];
}
// Следующее работает, но если eventAtLocation: вызывается из формы, вызывается superview swapImage (-> вывод NSLog появляется), но представление не обновляется
- (void) touchesBegan: (NSSet *) касается события Event: (UIEvent *)
{
// [self autoSwapImage];
} * +1010 *
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
@end