的UIImageView。缩放和居中到任意矩形。无法在屏幕上确定正确的中心

时间:2012-09-26 21:25:07

标签: objective-c ios uiview

有简单的iPad应用程序。视图层次结构是: 窗口 - UIView - UIImageView UIImageView加载的图像大于屏幕尺寸(即1280 x 2000对768 x 1004)。我需要放大图像的任意矩形部分(将其放在屏幕上),然后将其置于屏幕中心。目前我按照以下方式放大:

-(IBAction)posIt:(id)sender
{
    // rectangle size and origin in image's coordinates. Its received from out of application
    CGFloat x = 550.f;
    CGFloat y = 1006.f;
    CGFloat w = 719.f;
    CGFloat h = 850.f;

    CGSize frameSize = CGSizeMake(_imgView.image.size.width, _imgView.image.size.height);
    _imgView.frame = CGRectMakeWithParts(CGPointMake(0, 0), frameSize);

    // Calculate center manually because orientation changing
    CGPoint superCenter = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2);

    // delta is the factor between size of image size and device screen
    CGFloat delta = 768.f/w;

    // resizing UIImageView to fit rectangle on the screen
    frameSize = CGSizeMake(_imgView.image.size.width * delta, _imgView.image.size.height * delta);
    _imgView.frame = CGRectMakeWithParts(CGPointMake(0, 0), frameSize);

    // Here is I'm trying to calculate center of rectangle
    _imgView.center = CGPointMake(superCenter.x + (superCenter.x - (w/2)*delta - x * delta), superCenter.y + (superCenter.y - (h/2)*delta - y * delta));
}

UIImageView的ContentMode参数是AspectFit。我相信将一个点(UIImageView的中心)移动到另一个点(为了将矩形移动到superView的中心),我将使用以下公式:

newX = oldX + oldX - rectCenterX;

newY = oldY + oldY - rectCenterY;

由于UIImageView是使用 delta 因子缩放的,因此 rectCenterX rectCenterY 应该与相同的 delta 相乘。但我错了。矩形中心从superView中心跳出来。

是否有某种方法可以正确进行这些计算?我错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我已经管理了正确且稳定的图像居中。而不是计算图像的中心我正在计算UIImageView的框架的原点坐标,如下所示:

CGPoint newOrigin = CGPointMake((-zoomRect.origin.x * delta) + superCenter.x - (zoomRect.size.width / 2) * delta, 
                                (-zoomRect.origin.y * delta) + superCenter.y - (zoomRect.size.height / 2) * delta);

事实证明,计算中心和原点之间存在一些差异。无论如何问题都解决了。谢谢大家。