从另一个对象调用时,UIImage不会更新

时间:2012-02-16 17:46:36

标签: objective-c ios cocoa-touch

我有一个UIImageView,其方法是更改​​显示的图像。它工作正常,如果方法是由UIImageView本身接收的触摸事件触发的,但同样的方法无法更新UIImageView,如果从另一个对象调用,则触发触摸事件。我在相关方法中有一个NSLog调用,因此可以看出,在这两种情况下调用该方法。但只有在一种情况下,我才能看到图像的实际变化,而在另一种情况下,视图不会更新。 当它工作时,我不需要setNeedsDisplay或setNeedsLayout,但这是我试图解决问题。在UIImageView及其superview中设置needsDisplay和needsLayout。无济于事。我可以看到,图像实际上已经改变了,如果我旋转设备,这会导致刷新,我看到,UIImageView确实发生了变化。

superview使用makeObjectsPerformSelector:withObject:

在OutletCollection上调用方法eventAtLocation:

这对我来说肯定是一个令人尴尬的错误,但我几个小时都无法理解。我的想法很少尝试: - (

以下是相关代码:

- (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 *)触及withEvent:(UIEvent *)事件     {         // [self autoSwapImage];     }

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    //[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
@end

1 个答案:

答案 0 :(得分:0)

看起来你实际上并没有设置UIImageView的图像,你只是设置了self.image。你需要做一些像

这样的事情
self.myImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%i.jpg", currentImage]];

另外你还要检查一下[UIImage imageNamed:]实际上是在返回一张图片,而且它不是零。

UIImage* image = [UIImage imageNamed:@"someImage"];
if(!image){
  NSLog(@"%@",@"Image Not Found");
}