UIImageView 하위보기가 포함 된 UIView 주변에 "marching ants" (an animated dashed line) selection indicator을 만들려고합니다. 그러나, I가있는 UIImageView 내부 스케일링 및 회전이 가능하도록 아핀를 사용하여 뷰 변환 크기 (및 회전) 할코어 그래픽 경로의 변형을 방지하거나 보정하는 방법은 무엇입니까?
-(void) drawSelectedMarquee{
CGContextRef c=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(c, [[UIColor whiteColor] CGColor]);
CGRect f=self.bounds;
CGContextSetLineWidth(c, 2.0);
CGFloat dashes[]={1,2};
CGContextSetLineDash(c, 0, dashes, 2);
CGContextBeginPath(c);
CGContextAddRect(c, f);
CGContextStrokePath(c);
}
: 다음의 UIView의 둘레 점선 그리기 코어 그래픽을 사용 사소한
코어 그래픽 명백하게도, 스케일링 변환뿐만 의해 스케일링된다 대하여 "사용자 공간 포인트"흡입 때문에-(void) scaleByX:(CGFloat) xScale andY:(CGFloat) yScale{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.1];
[UIView setAnimationBeginsFromCurrentState:YES];
self.transform=CGAffineTransformScale(self.transform, xScale, yScale);
[UIView commitAnimations];
}
그러나, 비율에서 확장하는 점선시킨다. 따라서 뷰 배율이 작을수록 선이 더 얇아지고 대시가 더 가까워지고 뷰 배율이 커지면 선이 더 두껍게 늘어나고 대시는 따로 분리됩니다.
인터페이스 요소로서 선택 윤곽은 고정 폭의 고정 된 크기의 대시로 남아 있어야합니다. 난 회전 및 기본보기의 UIImageView 하위보기 배율을 시도했지만 UIImageView superview 밖으로 확장 할 수 있습니다.
나는 임의 문자를 올바르게 그릴 수있는 방법을 생각할 수 있습니다. 뷰의 절대 크기를 추적 한 다음 다시 그릴 때마다 최종 사용자 공간 단위를 다시 계산하거나 UIImageView 때마다 선택 윤곽을 사용하여 새 뷰를 만들 수 있습니다. 그러나 이러한 솔루션은 비능하고 버그가 발생하기 쉽습니다.
UIView에서 그래픽을 그리거나 변환하는 방법에 대한 설명서에서 뭔가 놓친 것 같습니다.
[업데이트 : 행진 개미 사용은 iPhone의 작은 화면에서 유용하지 않기 때문에 다른 방법을 채택했습니다. 그러나 나는 여전히이 특별한 문제에 대한 해결책에 관심이있다.]
코어 애니메이션 솔루션을 살펴 보겠습니다. 겹치는 뷰 또는 레이어를 사용하여 문제가되는 것은 이미지 뷰가 포함 된 뷰의 프레임이 이미지의 크기가 커지면 커지고 축소되어야한다는 것입니다. 이것은 오버레이로 사용되는 모든 독립적 인 뷰에도 적용됩니다. 이미지의 축척으로 프레임을 동기화하면 눈에 띄는 결함이 생깁니다. 바라건대, CA 레이어는 그 문제를 가지지 않을 것입니다. – TechZen
나는 내가 원래 원했던 것을 정확히 할 수 있다고 생각하지 않기 때문에 이것을 대답으로 받아 들일 것입니다. 이 대답은 동일한 문제 공간에서 매우 유용한 정보를 제공합니다. – TechZen