如何将特定ImageView坐标置于UIScrollView中心

时间:2010-09-19 08:13:32

标签: objective-c xcode

如何以编程方式在UIScrollView中最佳定位图像(UIImageView)?

我有需要在UIScrollView中水平和垂直居中的图像位置的x和y坐标(CGPoint C = centerCoordinate)。

===Image=============================================
|                                                   |
|                                                   |
|              ==ScrollView===                      |
|              |             |                      |
|              |      C      |                      |
|              |             |                      |
|              ===============                      |
|                                                   |
|                                                   |
|                                                   |
|                                                   |
=====================================================

我试过了 a)使用ImageView的center属性,但似乎没有在这里取得进展。 b)然后我尝试通过将原点设置为

来计算frame-property
  C.x = -1 * centerCoordinate.x + ScrollView.frame.size.width / 2
  C.y = -1 * centerCoordinate.y + ScrollView.frame.size.width / 2

但没有成功。

任何提示?

问候

1 个答案:

答案 0 :(得分:0)

我想我找到了这样做的方法。让我印象深刻的是如何考虑zoomScale以及分析正确的帧坐标,因为这些在缩放和放大期间会发生变化。滚动活动。

现在似乎有效的解决方案是在UIScrollView中实现的,如下所示:

- (void) setViewPosition:(CGPoint) tapPoint zoomScale:(NSNumber *)zoomScale {
   ...
   self.zoomScale = zoomScale.floatValue;

   // Determine new center coordinate
   CGPoint mCOffset;
   mCOffset.x = tapPoint.x * self.zoomScale - frameSizeIvar.width  / 2;
   mCOffset.y = tapPoint.y * self.zoomScale - frameSizeIvar.height / 2;

   // Check whether center coordinate will place the map out of range
   // x-coordinate
   if ( mCOffset.x < 0 ) 
       mCOffset.x = 0;
   else if ( mCOffset.x > imageView.bounds.size.width * self.zoomScale - frameSizeIvar.width)
       mCOffset.x = imageView.bounds.size.width * self.zoomScale - frameSizeIvar.width;

   // y-coordinate
   if ( mCOffset.y < 0 ) 
      mCOffset.y = 0;
   else if ( mCOffset.y > iMapImageView.bounds.size.height * self.zoomScale - frameSizeIvar.height)
      mCOffset.y = iMapImageView.bounds.size.height * self.zoomScale - frameSizeIvar.height;

   self.contentOffset = mCOffset;
   ...
}