gpt4 book ai didi

ios - Swift - 添加 UIImageView 作为 UIWebView scrollView 的 subview 和缩放

转载 作者:搜寻专家 更新时间:2023-11-01 07:21:47 26 4
gpt4 key购买 nike

我有一个 UIWebView 并且我已经成功地添加了一个 UIImage View 到 UIWebViewscrollView 就像所以:

let localUrl = String(format:"%@/%@", PDFFilePath, fileNameGroup)
let url = NSURL.fileURLWithPath(localUrl)

panRecognizer = UITapGestureRecognizer(target: self, action: #selector(panDetected))
pinchRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(pinchDetected))

panRecognizer.delegate = self
pinchRecognizer.delegate = self

webview = UIWebView()
webview.frame = self.view.bounds
webview.scrollView.frame = webview.frame

webview.userInteractionEnabled = true
webview.scalesPageToFit = true
webview.becomeFirstResponder()
webview.delegate = self
webview.scrollView.delegate = self
self.view.addSubview(webview)
webview.loadRequest(NSURLRequest(URL:url))
webview.gestureRecognizers = [pinchRecognizer, panRecognizer]

let stampView:StampAnnotation = StampAnnotation(imageIcon: UIImage(named: "approved.png"), location: CGPointMake(currentPoint.x, currentPoint.y))
self.webview.scrollView.addSubview(stampView)

我的 UIWebView scrollView 是可扩展的。现在我正在寻找当 scrollView 秤。因此,如果用户放大 scrollViewUIImageView 将变大并保持在固定位置;如果用户缩小,UIImageView > 会变小,而 scrollView 在固定位置变小。

我真的希望这是有道理的。我尝试了以下方法:

func pinchDetected(recognizer:UIPinchGestureRecognizer)
{

for views in webview.scrollView.subviews
{
if(views.isKindOfClass(UIImageView))
{
views.transform = CGAffineTransformScale(views.transform, recognizer.scale, recognizer.scale)
recognizer.scale = 1
}
}

if(appDelegate.annotationSelected == 0)
{
webview.scalesPageToFit = true
}
else
{
webview.scalesPageToFit = false
}

}

但是如果我删除这一行,这没有任何作用:

recognizer.scale = 1

它扩展得太大太快了。我的问题是,如何让我的 UIImageViewUIWebviewscrollView 滚动时缩放?

如有任何帮助,我们将不胜感激。

这解决了我的问题。

func scrollViewDidZoom(scrollView: UIScrollView) {

for views in webview.scrollView.subviews
{
if(views.isKindOfClass(UIImageView))
{
views.transform = CGAffineTransformMakeScale(scrollView.zoomScale, scrollView.zoomScale)
}
}

}

不,它不会停留在页面上的固定位置,但我认为这是一个约束问题?

最佳答案

你很接近...

1) 添加一个属性来保存您的 stampViewFrame 的外部引用:

var stampViewFrame = CGRect(x: 100, y: 100, width: 100, height: 100)

2) 将您的 scrollViewDidZoom() 替换为:

 func scrollViewDidZoom(scrollView: UIScrollView) {
for views in webView.scrollView.subviews
{
if(views.isKindOfClass(UIImageView))
{
views.frame = CGRect(x: stampViewFrame.origin.x * scrollView.zoomScale, y: stampViewFrame.origin.y * scrollView.zoomScale, width: stampViewFrame.width * scrollView.zoomScale, height: stampViewFrame.height * scrollView.zoomScale)
}
}
}

3) 最后,因为在每个新的缩放操作开始时缩放比例重置为 1,所以您需要调整 stampViewFrame 属性的值:

func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
stampViewFrame = CGRect(x: stampViewFrame.origin.x * scale, y: stampViewFrame.origin.y * scale, width: stampViewFrame.width * scale, height: stampViewFrame.height * scale)
}

我还试图回答您关于方向更改期间布局的其他问题,但我现在对您要尝试做的事情有了更好的理解。如果您希望您的 stampView 始终位于相对于 web 内容 的相同位置,您必须进入 HTML/JS,因为网页会动态布局。一个更简单(并且希望足够接近)的解决方案是添加以下内容:

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

webView.frame = view.bounds
stampView.frame = stampViewFrame
}

关于ios - Swift - 添加 UIImageView 作为 UIWebView scrollView 的 subview 和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com