2012-02-16 2 views
0

표시되는 이미지를 변경하는 방법이있는 UIImageView가 있습니다. 그것은 UIImageView 자체에 의해받은 터치 이벤트에서 메서드를 트리거하는 경우 잘 작동하지만 같은 메서드는 UIImageView, 터치 이벤트를 트리거 한 다른 개체에서 호출 된 경우 업데이트하지 못합니다. 나는 문제의 메서드에서 NSLog 호출을 가지고 있으므로 메서드가 두 경우 모두 호출된다는 것을 알 수 있습니다. 그러나 한 경우에만 이미지의 실제 변경 사항을 볼 수 있습니다. 다른 경우에는보기가 업데이트되지 않습니다. 제대로 작동하면 setNeedsDisplay 또는 setNeedsLayout을 설정할 필요가 없지만 문제를 해결하려고했습니다. UIImageView 및 superview에서 needsDisplay 및 needsLayout을 설정합니다. 아무 소용이 없다. UIImageView가 실제로 변경되었다는 것을 알았습니다. 이미지가 실제로 변경된 것입니다. 새로 고침을 유발하는 장치를 회전하면 볼 수 있습니다.다른 개체에서 호출 할 때 UIImage가 업데이트되지 않습니다.

수퍼는 방법 eventAtLocation를 호출 : withObject : 그것은 확실히 내 인생에 당황 실수처럼 보이는

,하지만 난 시간 이후 그것을 알아낼 수없는 makeObjectsPerformSelector를 사용하여 OutletCollection에. > - 양식에게 swapImage가 호출되는 수퍼를 (라고 : 나는

가 여기에 해당 코드의 :-(것을 시도하는 아이디어에서 실행하고 있습니다 :

- (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 경우 NSLog 출력) 나타나지만도 업데이트되지 - (무효) touchesBegan : (NSSet *)는 withEvent 접촉 (의 UIEvent *) 이벤트 { // [자기 autoSwapImage] }

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

답변

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"); 
} 
+0

미안 해요, 난 그것에 대해하지 명확했다, 그것은하지 않습니다 내가 게시 된 코드가있는 UIImageView의 서브 클래스에서, 그래서 self.image는있는 UIImageView의 이미지 속성을 설정해야합니까? –

+0

죄송합니다 새로운 라인에 대한 반환을 반환하고 실수로 의견을 보냈습니다 ... ...이 클래스의 "자체"UIImageView 때문에이 클래스의 있기 때문에 지금 어떻게 제안을 테스트할지 모르겠다 UIImageView 속성, 물론 ... 그리고이 클래스 내에서 호출하면 작동하지 않습니다. 그런 다음 다시 그리기를 강제하는 장치를 회전하면 이미지가 실제로 변경되었음을 알 수 있습니다. 따라서 UIImageView가 업데이트되지 않는 문제입니다. 강제로 다시 그리기 위해서는 setNeedsDisplay 이외의 것이 있어야합니다. –

+0

우연히 setImage 또는 drawRect를 재정의 했습니까? –

관련 문제