[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];
스레드 방식으로 호출하였더니 작동이 잘 되었다.
좀 더 많은 공부를 해야겠다.
댓글
댓글 쓰기