如何在不同的屏幕尺寸上获得完全相同的点?

时间:2018-07-16 15:30:35

标签: swift xcode layout uitapgesturerecognizer screen-size

当用户点击image(黑点)的特定区域时,我想调用该动作(转到另一个视图):。图像充满整个视图,内容模式为“宽高比”。问题是,当我在另一屏幕尺寸(例如iPhone 8)上设置它时,``点击区域''被移动了。我尝试使用按钮和约束或使用屏幕分辨率(nativeBounds)进行点转换的UITapGestureRecognizer来解决此问题,但没有任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试创建自己的名为UIView的{​​{1}}子类,而不是使用图像。

BlackDotsView方法中,您可以绘制线条。为了确定线条的起点和终点,您需要对视图的宽度和高度进行一些数学运算。您计算所有行的结尾并创建draw(_rect:),然后描画路径。

UIBezierPath的初始化程序中,您可以将点添加为子视图。要使其圆形,只需将BlackDotsView设置为点宽度的一半即可。然后,您可以将dotView.layer.cornerRadius s添加到点视图。

您可以通过创建具有UITapGestureRecognizer方法的BlackDotsViewDelegate来遵循委托模式。点击一个点时,您将调用委托方法并传递该点的索引。

答案 1 :(得分:0)

可以使用约束条件以UIButton来匹配圆的位置。技巧是使用约束的multiplier将按钮的宽度/高度和位置缩放到屏幕尺寸。

我将描述如何对一个按钮进行操作,然后您可以对其他按钮重复该操作。我假设图像宽657918。如果我将尺寸反转了,则需要用实际值代替我使用的值。

  1. 创建一个UIView来容纳图像和按钮。给此视图使用multiplier 657:918的宽高比约束,该约束为width:height。将UIImageView添加到此视图,并将其4条边限制为具有0偏移的视图边。在主视图的左右边缘赋予此视图约束,并在垂直约束下将其放置在屏幕上。
  2. 获取图像中圆圈的宽度/高度以及右边缘和下边缘的水平和垂直位置。例如,最上方的圆圈为106 x 106,在水平位置392处结束,而最下方的圆圈为338
  3. 使用乘数106:657将按钮的宽度设置为等于包含视图的宽度,乘数106:918是圆的宽度:图像的宽度。
  4. 使用乘数392:657将按钮的高度设置为等于包含视图的高度,乘数338:918是圆的高度:图像的高度。
  5. 通过乘数for(int i=1; i <= allsize; i+=10) { all[c] = new All(); mPremiumList.clear(); if(pre_size != 0){ if(pre_order < pre_size){ mPremiumList.add(premiumArrayList.get(pre_order)); pre_order++; } } all[c].setPremiumItemsInSection(mPremiumList); mAllList.add(all[c]); c++; } 将按钮的后边缘设置为等于包含视图的后边缘,乘数All all = new All(); 是圆的结尾:图像的宽度。
  6. 使用乘数{{1}}将按钮的底边设置为与包含视图的底边相等,乘数{{1}}是圆的底部:图像的高度。

这将使按钮在所有设备上与圆圈保持对齐。对其他圈子重复步骤2到6。