首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode iOS标志“缩放框”

Xcode iOS标志“缩放框”
EN

Stack Overflow用户
提问于 2018-09-19 04:07:21
回答 1查看 170关注 0票数 7

Notability和其他笔记应用程序都有这个“缩放框”功能,你可以在底部的放大框中绘制。用户还可以拖动顶部的框来更改想要在底部放大的内容。我已经尝试了几乎所有我能想到的在我的应用程序中添加这个功能的方法。我已经在两个视图中添加了相同的文档,但是我遇到了许多内存问题,我复制了文件,但又出现了内存问题。有没有人知道一种简单的方法?有没有什么办法,我可以只有一个视图,是另一个视图的放大?

EN

回答 1

Stack Overflow用户

发布于 2018-09-19 05:07:32

创建一个新的Cocoa Touch类(可以将其命名为MagnifyView),并将其设置为UIView的子类,在您的类中添加以下代码:

代码语言:javascript
复制
var viewToMagnify: UIView!
var touchPoint: CGPoint!

override init(frame: CGRect)
{
    super.init(frame: frame)
    commonInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    commonInit()
}

func commonInit()
{
    // Set border color, border width and corner radius of the magnify view
    self.layer.borderColor = UIColor.lightGray.cgColor
    self.layer.borderWidth = 3
    self.layer.cornerRadius = 50
    self.layer.masksToBounds = true
}

func setTouchPoint(pt: CGPoint)
{
    touchPoint = pt
    self.center = CGPoint(x: pt.x, y: pt.y - 100)
}

override func draw(_ rect: CGRect) {
    let context = UIGraphicsGetCurrentContext()
    context!.translateBy(x: 1 * (self.frame.size.width * 0.5), y: 1 * (self.frame.size.height * 0.5))
    context!.scaleBy(x: 1.5, y: 1.5) // 1.5 is the zoom scale
    context!.translateBy(x: -1 * (touchPoint.x), y: -1 * (touchPoint.y))
    self.viewToMagnify.layer.render(in: context!)
}

要使用它,在视图控制器中实现touchesBegan,touchesMoved和touchesEnd函数,你想要有放大效果。

下面是如何实现的:

代码语言:javascript
复制
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
    let point = touches.first?.location(in: self.view)
    if magnifyView == nil
    {
        magnifyView = MagnifyView.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
        magnifyView.viewToMagnify = self.view
        magnifyView.setTouchPoint(pt: point!)
        self.view.addSubview(magnifyView)
    }
}

override func touchesEnded(_ touches: Set, with event: UIEvent?) {
    if magnifyView != nil
    {
        magnifyView.removeFromSuperview()
        magnifyView = nil
    }
}

override func touchesMoved(_ touches: Set, with event: UIEvent?) {
    let point = touches.first?.location(in: self.view)
    magnifyView.setTouchPoint(pt: point!)
    magnifyView.setNeedsDisplay()
}

原始源here

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52393900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档