这是我quick'n'dirty解决方案:
- (CGPoint)convertPoint:(CGPoint)sourcePoint fromContentSize:(CGSize)sourceSize {
CGPoint targetPoint = sourcePoint;
CGSize targetSize = self.bounds.size;
CGFloat ratioX = targetSize.width/sourceSize.width;
CGFloat ratioY = targetSize.height/sourceSize.height;
if (self.contentMode == UIViewContentModeScaleToFill) {
targetPoint.x *= ratioX;
targetPoint.y *= ratioY;
}
else if(self.contentMode == UIViewContentModeScaleAspectFit) {
CGFloat scale = MIN(ratioX, ratioY);
targetPoint.x *= scale;
targetPoint.y *= scale;
targetPoint.x += (self.frame.size.width - sourceSize.width * scale)/2.0f;
targetPoint.y += (self.frame.size.height - sourceSize.height * scale)/2.0f;
}
else if(self.contentMode == UIViewContentModeScaleAspectFill) {
CGFloat scale = MAX(ratioX, ratioY);
targetPoint.x *= scale;
targetPoint.y *= scale;
targetPoint.x += (self.frame.size.width - sourceSize.width * scale)/2.0f;
targetPoint.y += (self.frame.size.height - sourceSize.height * scale)/2.0f;
}
return targetPoint;
}
- (CGRect)convertRect:(CGRect)sourceRect fromContentSize:(CGSize)sourceSize {
CGRect targetRect = sourceRect;
CGSize targetSize = self.bounds.size;
CGFloat ratioX = targetSize.width/sourceSize.width;
CGFloat ratioY = targetSize.height/sourceSize.height;
if (self.contentMode == UIViewContentModeScaleToFill) {
targetRect.origin.x *= ratioX;
targetRect.origin.y *= ratioY;
targetRect.size.width *= ratioX;
targetRect.size.height *= ratioY;
}
else if(self.contentMode == UIViewContentModeScaleAspectFit) {
CGFloat scale = MIN(ratioX, ratioY);
targetRect.origin.x *= scale;
targetRect.origin.y *= scale;
targetRect.origin.x += (self.frame.size.width - sourceSize.width * scale)/2.0f;
targetRect.origin.y += (self.frame.size.height - sourceSize.height * scale)/2.0f;
targetRect.size.width *= scale;
targetRect.size.height *= scale;
}
else if(self.contentMode == UIViewContentModeScaleAspectFill) {
CGFloat scale = MAX(ratioX, ratioY);
targetRect.origin.x *= scale;
targetRect.origin.y *= scale;
targetRect.origin.x += (self.frame.size.width - sourceSize.width * scale)/2.0f;
targetRect.origin.y += (self.frame.size.height - sourceSize.height * scale)/2.0f;
targetRect.size.width *= scale;
targetRect.size.height *= scale;
}
return targetRect;
}
当它与重构优化后,我会在github上发布它,并将链接发布到这里。 也许这个片段可能对某人有帮助。
非常好 - 如果您还提供了其他方法(从imageView坐标到图像坐标),则会更好。 – sarfata
你说得对,我马上加上。 – nubbel
不要打扰,我已经完成了一些模式,我现在正在完成它,并会在今天晚些时候在github上向您发送拉请求。 – sarfata