保持缩放以UIView中心为中心(而不是从左上角缩放)

时间:2017-02-20 18:50:00

标签: ios swift uiview zoom uipinchgesturerecognizer

我正在实现基于捏合的缩放,并且从视图的左上角开始缩放,而不是从中心缩放。经过几次尝试(这似乎是一个cs起源问题等),没有找到一个好的解决方案,但必须有一些(可能是显而易见的)从视图中心扩展的方法。如果之前已经回答过,那么会很感激指向答案的指针(在广泛搜索后找不到)。如果没有,将欣赏正确方法的输入。

编辑以下答案(谢谢): 这是我最初使用的代码:

func pinchDetected(pinchGestureRecognizer:UIPinchGestureRecognizer){

    let scale = pinchGestureRecognizer.scale
    view.transform = CGAffineTransformScale(view.transform, scale, scale)
    pinchGestureRecognizer.scale = 1.0

}

在捏合时,视图内部的内容将向右和向下扩展,而不是相同+向左和向上(因此假设它不是缩放"来自中心")。希望这更清楚。

3 个答案:

答案 0 :(得分:0)

这是您要查找的代码

view.transform = CGAffineTransformScale(view.transform, 1.1, 1.1);

或在Swift中

view.transform = view.transform.scaledBy(x: 1.1, y: 1.1)

这将通过提供的比例增加视图高度和宽度。 现在,您可以使用手势识别器控制金额。

答案 1 :(得分:0)

您应该只需使用此question中的代码即可从中心进行缩放。如果您想要从手指放大,请查看该问题的答案。

答案 2 :(得分:0)

很难知道在没有看到你的代码的情况下发生了什么。默认情况下,转换会对视图中心起作用,这似乎就是您想要的。您可以通过更改视图图层上的anchorPoint属性来使变换作用于其他某个点。

或者您可以通过将原点转换为该点,进行转换以及再次转换来创建关于任意点的转换。例如:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            if indexPath.row == 1
            {
                let cell = Bundle.main.loadNibNamed("KonuDetayKonuTableViewCell", owner: self, options: nil)?.first as! KonuDetayKonuTableViewCell
                cell.lblBaslik.text = arrayYorumData[indexPath.row].baslik
                cell.lblKullaniciAdiVeTarih.text = arrayYorumData[indexPath.row].uye + " - " + arrayYorumData[indexPath.row].tarih
                cell.lblYazi.text = arrayYorumData[indexPath.row].yazi
                cell.updateConstraintsIfNeeded()
                if singleton.username != arrayYorumData[indexPath.row].uye{
                    cell.btnDüzenle.isHidden = true
                }

                return cell
            }

        }

其中该点相对于原点,默认为原点。