Ale*_*ger 1 xcode objective-c ios ios5
我一直在尝试在UIScrollView中获得UIView的转换后的CGRect.如果我没有放大,它可以正常工作,但一旦我缩放,新的CGRect就会移动.这是让我接近的代码:
CGFloat zoomScale = (scrollView.zoomScale);
CGRect newRect = [self.view convertRect:widgetView.frame fromView:scrollView];
CGPoint newPoint = [self.view convertPoint:widgetView.center fromView:scrollView];
// Increase the size of the CGRect by multiplying by the zoomScale
CGSize newSize = CGSizeMake(newRect.size.width * zoomScale, newRect.size.height * zoomScale);
// Subtract the offset of the UIScrollView for proper positioning
CGPoint newCenter = CGPointMake(newPoint.x - scrollView.contentOffset.x, newPoint.y - scrollView.contentOffset.y);
// Create rect with the proper width/height (x and y set by center)
newRect = CGRectMake(0, 0, newSize.width, newSize.height);
[self.view addSubview:widgetView];
widgetView.frame = newRect;
widgetView.center = newCenter;
Run Code Online (Sandbox Code Playgroud)
我很确定我的问题在于zoomScale - 我应该根据zoomScale值修改x和y坐标.不过,到目前为止我尝试的所有东西都没有成功.
Ale*_*ger 10
我在iOS开发论坛上收到了用户Brian2012的以下回答:
我做了什么:
我发现了什么:
结论:
要确定窗口小部件相对于视图控制器主视图坐标系的位置,您需要自己进行数学运算.在这种情况下,convertRect方法没有做任何有用的事情.这是一些尝试的代码
- (CGRect)computePositionForWidget:(UIView *)widgetView fromView:(UIScrollView *)scrollView
{
CGRect frame;
float scale;
scale = scrollView.zoomScale;
// compute the widget size based on the zoom scale
frame.size.width = widgetView.frame.size.width * scale;
frame.size.height = widgetView.frame.size.height * scale;
// compute the widget position based on the zoom scale and contentOffset
frame.origin.x = widgetView.frame.origin.x * scale - scrollView.contentOffset.x + scrollView.frame.origin.x;
frame.origin.y = widgetView.frame.origin.y * scale - scrollView.contentOffset.y + scrollView.frame.origin.y;
// return the widget coordinates in the coordinate system of the view that contains the scroll view
return( frame );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3737 次 |
| 最近记录: |