[iOS] ImageView 를 다른 메소드에서 변경시키기

버튼을 클릭하면 이미지뷰의 이미지를 변경하도록 메소드를 만들었다.

이벤트 발생에서 해당 메소드를 호출하도록 만들었다.


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  UITouch *touch = [touches anyObject];
  CGPoint location = [touch locationInView:self.mainView];    
    //ima01 사용자가 터치했는지 여부 판단
    if (CGRectContainsPoint(self.img01.frame, location))
    {
      [self calendarTouch:0];
    }
}

이런식으로 작성하였다.

이를 받아주는 메소드는 아래와 같다.
- (void)calendarTouch:(int)touch_i
{
    [self touchChangeImage:[NSNumber numberWithInt:touch_i]];
}

여기서 호출하는 메소드는 또 다음과 같다.

- (void)touchChangeImage:(NSNumber *)snd_i
{
    // 선택 이미지 적용
    int touch_i = [snd_i intValue];
    UIImageView *touchIV = (UIImageView *)[self.mainView viewWithTag:touch_i + 201];
    if ([self image:touchIV.image isEqualTo:cImage_A]) {
        touchIV.image = tImage_CA;
    }
}

작동이 잘 되었다.

하지만 새로운 버튼을 만들고 
그 버튼에서 touchChangeImage 메소드를 호출하면
[self touchChangeImage:i];
이미지 변경이 되지 않는 것이다.

이유가 무엇일까?
많은 시도 끝에 다음과 같이 변경하였다.

호출하는 쪽에서 다음과 같이 하면 된다.
// 메소드로 해야 이미지 표시가 된다. 삽질 3일째 알아낸
[self performSelectorOnMainThread:@selector(touchChangeImage:) withObject:[NSNumber numberWithInt:i] waitUntilDone:NO];

스레드 방식으로 호출하였더니 작동이 잘 되었다.
좀 더 많은 공부를 해야겠다.




댓글

이 블로그의 인기 게시물

한글 2010 에서 Ctrl + F10 누르면 특수문자 안뜰 때

아이폰에서 RFID 사용하는 방법

VCC 와 GND 는 무엇일까?