Поначалу я думал, что руководителю будет сложно.Но, наконец, если вы поместите imageView в UIScrollView, это не составит труда.
Идея состоит в том, чтобы переместить buttonView за пределы imageView во время масштабирования, а когда масштабирование закончится, верните его обратно в imageView, чтобы сделать вид, что ничего не произошло.,Я знаю, что это слишком многословно в программировании, но на самом деле оно отлично работает для вашего случая.
var originalCenter : CGPoint! // The center of ButtonView in imageView.
//All functions are from the UIScrollViewDelegate.
func viewForZooming(in scrollView: UIScrollView) -> UIView?{
originalCenter = buttonView.center // remember the original position.
return imageView
}
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
buttonView.frame = imageView.convert(buttonView.frame, to: scrollView)
scrollView.addSubview(buttonView)//add to superView of imageImage.
}
func scrollViewDidZoom(_ scrollView: UIScrollView){
buttonView.center = imageView.convert(originalCenter, to: scrollView) //During Zooming, update the buttonView in ScrollView.
}
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat){
buttonView.frame = imageView.convert(buttonView.frame, from: scrollView)
imageView.addSubview(buttonView) //put it back.
}
Я знаю, что лучше использовать параметр для управления такой операцией.Но я не нашел ни одного согласно публичным API.Может быть, есть лучший способ, надеюсь, этот тоже ваш ответ.