IBOutletCollection에 저장된 두 개의 UIImageViews를 바르게 바꾸는 데 문제가 있습니다. 개념적으로, 나는 틀린 일을해야만합니다.IBOutletCollection의 이미지 교환
인덱스 된 데이터의 NSMutableArray와 인덱싱 된 UIImageViews의 NSMutableArray가 있다고 가정 해 봅니다. 두 인덱스 배열이 일치하도록하고 싶습니다. 즉, UIImageView 배열의 n 번째 인덱싱 된 요소에 n 번째 데이터 요소가 반영되어야합니다. 이미지 배열. 처음부터
@property (nonatomic, strong) IBOutletCollection(MyImageView) NSMutableArray* myImages;
@property (nonatomic, strong) NSMutableArray* myData;
, 내가하여 내 IBOutletCollection 정렬하려면 화면의 외관이 왼쪽에서 오른쪽으로되어, 인덱스 0의 요소가 왼쪽에있는 모든 방법을 표시해야 즉, 그래서 X를 좌표 .. ., 화면 오른쪽 끝까지. 나는 데이터 배열의 두 멤버를 교체 할 때마다
NSComparisonResult imageSort(id label1, id label2, void* context)
{
if ([label1 frame].origin.x < [label2 frame].origin.x)
return NSOrderedAscending;
else if ([label1 frame].origin.x > [label2 frame].origin.x)
return NSOrderedDescending;
else { // Determine using y-coordinate
if ([label1 frame].origin.y < [label2 frame].origin.y)
return NSOrderedAscending;
else if ([label1 frame].origin.y > [label2 frame].origin.y)
return NSOrderedDescending;
else
return NSOrderedSame;
}
}
지금, 나는 각각의 UIImageView 항상 그 슬롯에 데이터를 반영 할 수 있도록,뿐만 아니라 자신의 이미지를 교체해야합니다. 내가 애니메이션이나 이미지의 배열을 업데이트하려고하면
// Switch state data in arrays
Data* sendToBack = myData[frontIndex];
Data* bringToFront = myData[backIndex];
myData[frontIndex] = bringToFront;
myData[backIndex] = sendToBack;
MyImageView* sendToBackImg = myImages[frontIndex];
MyImageView* bringToFrontImg = myImages[backIndex];
myImages[frontIndex] = bringToFrontImg;
myImages[backIndex] = sendToBackImg;
문제가 발생합니다의 내가 교환 할 두 가지 요소는 인덱스 frontIndex 및 backIndex 있다고 가정 해 봅시다. 업데이트 된 배열 요소의 인덱스 0과 9에서 애니메이션 또는 업데이트를 호출하면 실제로 업데이트되는 뷰는 왼쪽에서 왼쪽과 9 번째 위치에있는 뷰가 아니라 새 위치에서 업데이트됩니다.
[myImages[frontIndex] animateInWayX]; --> this updates the on-screen view at backIndex
[myImages[backIndex] animateInWayY]; --> this updates the on-screen view at frontIndex
디버거에서 배열을 검사했는데 스왑이 발생했습니다. 즉, myImages 배열의 frontIndex 요소는 myData [frontIndex]에서 모델을 반영하는 적절한 데이터를 표시하므로 뷰 배열이 올바르게됩니다. 스왑 된, 그것은 화면의 새로운 위치 (backIndex의 위치, 마치 움직이지 않는 것처럼)에 표시됩니다.
어떻게 수정합니까?
보기를 업데이트하고 있습니까? [self.view setNeedsDisplay] 및/또는 [self.view layoutIfNeeded] – YoCoh
은 animateInWayX 내부에서 발생하므로 애니메이션과 같이 아무런 관련이 없습니다. 가장 신선한 데이터를 사용해야합니다. – Cindeselia
루트처럼 느껴집니다. 문제는 개별 MyImageViews의 X 및 Y 좌표가 선언 한 순간부터 돌변으로 설정되어 있으므로 IBOutletArray에서 슬롯을 변경하더라도 imageViews 자체가 움직이지 않는다는 것입니다. 포인터를 리디렉션하는 대신 imageView 내에서 데이터를 새로 고치는 방법을 찾아야합니다 ...? – Cindeselia