이미지에 포함 된 PinView라는 UIView의 하위 클래스가 있습니다. 기본적으로 PinView는 내 앱에 여러 번 추가 된 다음 PinView 객체에 대한 변환을 수행합니다. 문제는 많은 PinView를 추가 할 때 각 PinView를 변환하기 때문에 내 앱이 느려지 게된다는 것입니다.여러보기에 개체 추가
이상적으로, 나는 하나의 '고정'PinView UIView 여러 번 추가되지만 가져 오려면 한 번만 변환해야합니다. 현재 이것은 작동하지 않는 것 같습니다. 정적 PinView 내 UIView 추가 할 때마다 UIView 한 번만 (그것 때문에 유일한 superview 내가 짐작하고있을 수있게되기 때문에) 나타납니다.
이 문제를 해결하는 가장 좋은 방법을 찾으려면 어떻게해야합니까? PinView에 단일 포인터를 사용하고 UIView에 여러 번 추가하고 통과 한 PinView에서 변환을 수행 할 수 있습니까? 내 UIView에 표시 PinViews에? (그런데 변환은 항상 모든 PinView에서 동일합니다).
임 성능 개선을위한 최선의 방법이라고 가정합니다. 그렇지 않은 경우 알려 주시기 바랍니다.
UPDATE :
- (void)layoutSubviews
{
CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue);
NSMutableArray *mut = nil;
PinView *pinView = nil;
CallOutView *callOut = nil;
//get all dictionary entries
for(NSString *identifier in self.annotationsDict.allKeys){
//get the array from dictionary
mut = [(NSArray *)([self.annotationsDict objectForKey:identifier]) mutableCopy];
//change layout if not nil
if([[mut objectAtIndex:PIN] isKindOfClass:[PinView class]]){
pinView = ((PinView *)[mut objectAtIndex:PIN]);
pinView.transform = transform;
[mut replaceObjectAtIndex:PIN withObject:pinView];
}
if([[mut objectAtIndex:CALL_OUT] isKindOfClass:[CallOutView class]]){
callOut = ((CallOutView *)[mut objectAtIndex:CALL_OUT]);
callOut.transform = transform;
[mut replaceObjectAtIndex:CALL_OUT withObject:callOut];
if(pinView !=nil)callOut.center = CGPointMake(pinView.center.x, pinView.center.y - pinView.frame.size.height);
}
[self updateAnnotationsKey:identifier forObject:[NSArray arrayWithArray:mut]];
mut = nil;
pinView = nil;
callOut = nil;
}
}
UPDATE :
위를 제거하고 지금 막이 :
- (void)layoutSubviews
{
CGAffineTransform transform = CGAffineTransformMakeScale(1.0/self.zoomValue, 1.0/self.zoomValue);
for(UIView *view in self.subviews){
view.transform = transform;
}
}
서브 클래 싱 및 정적 변수가 생각하는대로 작동하지 않는다고 생각합니다. 여러보기에 대해 동일한 변형이있는 경우 동일한보기를 여러 번 추가 할 수있는 경우에도 화면의 모든 위치가 동일한 위치에 표시됩니다. 그들이 다른 장소에 있다면 다른 물건이어야합니다. –
또 다른 옵션은 이미지를 drawRect : 또는 유사한 방법으로 직접 그립니다. –
변환을 적용하면 병목 현상이 발생하지 않을 것입니다. 실제로 시간이 걸리는 변형 된 뷰를 렌더링합니다. 변환이 매우 복잡한 경우 틀릴 수도 있습니다. 변환을 한 번만 생성하고 정적 CSTransform3D 또는 CGAffineTransform 변수로 설정해보십시오.하지만 내가 말하는 것은 그것이 느린 것 같습니다. 보다 구체적인 도움말을 얻기 위해 질문에 코드 예제를 추가 할 수 있습니다. –