如何防止视图超过其在Pinch Gesture上的父界限 - swift

时间:2015-12-27 15:51:38

标签: ios swift uiview uipinchgesturerecognizer

我将捏合手势分配给了uiview:

myView.addGestureRecognizer(UIPinchGestureRecognizer(target: self, action: "handlePinch:"))

此功能将缩放uiview:

func handlePinch(recognizer : UIPinchGestureRecognizer) {
    if let view = recognizer.view {
      view.transform = CGAffineTransformScale(view.transform, 
                                recognizer.scale, recognizer.scale)
      recognizer.scale = 1
    }
}

但是父视图中的比例不受限制。当我试图将其缩小时,它也没有限制,它会缩小直到它消失。

灰色视图是父

Desciption

我的问题

如何防止在按比例放大时超出父框架并在按比例缩小时消失?

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

SELECT COUNT(*) FROM `users_table`
WHERE date(CONVERT_TZ(`reg_date`, '-0:00', '-7:00')) >= DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 1 DAY)
AND date(CONVERT_TZ(`reg_date`, '-0:00', '-7:00')) <= DATE_SUB(CONCAT(CURDATE(), ' 23:59:59'), INTERVAL 1 DAY)

这里的关键是根据偏好决定下限,以及基于视图初始大小与父级大小之比的上限。通过这样做,视图不能缩小到比期望的更小,因为假设用户不应该缩小到由于难以收缩而无法调整大小的点。此外,不应允许视图无限扩展,从而溢出其边界。这种检查就是这样,因为它只允许您指定的一系列尺寸由用户的交互设置。

答案 1 :(得分:0)

我编写了一个函数来测试捏合是否超出父视图的边界。

/// test if an origin frame scale would be within the boundary of parent view
func scaleWithinBoundary(originFrame:CGRect, parent:UIView, scale:CGFloat) -> Bool {
    let height = originFrame.height * scale
    let width = originFrame.width * scale
    
    let leftX = originFrame.midX - width/2, rightX = originFrame.midX + width/2
    let topY = originFrame.midY - height/2, bottomY = originFrame.midY + height/2
    
    return leftX >= 0 && topY >= 0 && leftX >= parent.frame.minX && rightX <= parent.frame.maxX
        && topY >= parent.frame.minY && bottomY <= parent.frame.maxY
}