如何在 UITableViewCell 中获取 UIImageview 的屏幕位置
Posted
技术标签:
【中文标题】如何在 UITableViewCell 中获取 UIImageview 的屏幕位置【英文标题】:how to get screen location of UIImageview in a UITableViewCell 【发布时间】:2014-03-07 21:21:23 【问题描述】:我有一个UITableViewCell
,其中包含一个UIImageView'.
I need to display a 2nd
UIImageViewthat is centered on the 1st one.
(this 2nd UIImageView is not in the cell, but to be displayed on the screen coordinate system, so that it can be dragged outside of the
UITableViewthat has the
UITableViewCell`。
我可以得到第一个UIImageView
的x,y
,但是这个x,y
是相对于单元格的。
如何将此x,y
转换为相对于屏幕,用于将第二个UIImageView
初始定位在第一个的中心?
我尝试过: CGPoint screen_point = [device_icon_UIImageView convertPoint: device_icon_UIImageView.center toView:nil]; ...但 screen_point 是单元格内的相对 x,y (615,85),而不是 device_icon_UIImageView 在屏幕(窗口)坐标系中的 x,y 中心(应该约为 530,280)。
代码......................................
.h......................
@interface ataglance_central_controller : UIViewController UIImageView* e_fairy_UIImageView; @property (nonatomic,retain) UIImageView* e_fairy_UIImageView;
.m................................................. . @interface ataglance_central_controller () @结尾 @synthesize e_fairy_UIImageView;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
...
这是单元格中的第一个 UIIMAGEVIEW:...... UIImageView* device_icon_UIImageView = (UIImageView*)[cell.contentView viewWithTag: BASE_UIIMAGEVIEW_TAG + ui++ ]; ...
self.e_fairy_UIImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"E-fairy.png" ]];
self.e_fairy_UIImageView.center = screen_point;
[self.e_fairy_UIImageView setContentMode: UIViewContentModeScaleAspectFit]; [self.view addSubview: self.e_fairy_UIImageView];
...在屏幕底部显示e_fairy_UIImageView
,但单元格的表格在屏幕的上半部分。
【问题讨论】:
【参考方案1】:看看 UIView 方法 convertPoint:toView:, convertPoint:fromView: 和相关方法。这些允许 UIView 坐标系之间的转换。如果您将 toView 或 fromView 保留为 nil,它们还将转换为/从窗口坐标。
【讨论】:
【参考方案2】:我建议使用 UIView 的 convertRect:toView 或 convertPoint:toView 方法(在所有子类中都可用)。您的实现如下所示:
CGRect rect = [cell convertRect:imageView.frame toView:self.view];
或者,
CGPoint point = [cell convertPoint:imageView.center toView:self.view];
【讨论】:
CGPoint ... 不起作用。点为 85,581,但屏幕为 1024,655,表格和单元格位于上半部分。真的应该是“toView:self.view”吗?这是从单元格更新委托运行的,所以“自我”可能是相对于单元格的? 尝试使用 self.tableView 而不是 self.view(或任何你的 tableView 的名称) 我认为问题在于应该是[cell.contentView convertRect:imageView.frame toView:self.view];' or
[cell.contentView convertPoint:imageView.center toView:self.view];`
没有。我仍然无法转换为屏幕坐标。
抱歉,我不知道还能尝试什么。我在最近的一个项目中使用了 text 方法,效果很好。我的猜测是在 toView: 参数中继续尝试不同的视图/超级视图组合。【参考方案3】:
如果我理解正确的话,我想我做了类似的事情。 1)将单元格或imageView的框架定义为CGRect specifiedRect = yourCellOrImageView.frame
,2)使用该框架yourObject.frame = CGRectMake(specifiedRect.origin.x, specifiedRect.origin.y, objectWidth, objectHeight);
设置您的其他UIVIew对象@
【讨论】:
不好。我这样做了,并且 3_fairy_UIImageView.frame.origin.x = 0 和 .origin.y = 0:...... CGRect specifiedRect = device_icon_UIImageView.frame; self.e_fairy_UIImageView.frame = CGRectMake(specifiedRect.origin.x, specifiedRect.origin.y, w, h); 如果 origin.x 和 origin.y 为 0,那么你是从边界设置;如果您从框架中设置,您将获得实际尺寸【参考方案4】:我修好了。 我放弃了将相对单元格 x,y 转换为屏幕 x,y 的尝试。 相反,解决方案是简单地将相对单元格 x,y 添加到 UITableView 的绝对屏幕 x,y 中。
CGPoint icon_screen_CGPoint;
icon_screen_CGPoint.x = absolute screen x + device_icon_UIImageView.center.x;
icon_screen_CGPoint.y = absolute screen y + device_icon_UIImageView.center.y;
// Create screen UIImageView:
self.e__UIImageView = [ [UIImageView alloc] initWithImage:[UIImage imageNamed: @"E.png" ] ];
// Position it over center of cell icon:
self.e__UIImageView.center = icon_screen_CGPoint;
[self.view addSubview: self.e__UIImageView];
甜。
【讨论】:
以上是关于如何在 UITableViewCell 中获取 UIImageview 的屏幕位置的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift + UITableViewCell 如何在 heightForRowAt 中获取单元格对象
如何使用 cellForRowAtIndexPath 从 TableView 中获取自定义 UITableViewCell?
如何从 Cell 中获取 UITableViewCell indexPath?