Невозможно загрузить несколько изображений в режиме прокрутки одновременно
В настоящее время я пытаюсь научиться импортировать два PFImageView
изображения в мой scrollView
,
scrollView
сможет панорамировать и масштабировать оба изображения.
Изображения будут наложены друг на друга, и когда вы нажмете на длинное нажатие, верхнее изображение исчезнет, показывая вам изображение внизу.
Я смог получить изображения для показа, панорамирования, масштабирования, и у меня есть жест, чтобы работать. Единственное, что сейчас не работает - это ограничения.
Индивидуально мой код работает для каждого изображения, однако я не уверен, как внедрить их оба в функцию (viewForZoomingInScrollView
).
Когда я положил туда одно изображение (return image1
), изображение загружается отлично, все ограничения работают, а другое массивное!, и когда я ставлю (return image2
), первое изображение деформировано, а второе работает отлично.
Я пробовал суб-просмотр без успеха.
Может кто-нибудь, пожалуйста, посмотрите на мой код и скажите, где я ошибаюсь?
import Parse
import ParseUI
import UIKit
import SwiftSpinner
let imageScrollLargeImageName3 = PFImageView()
let imageScrollSmallImageName3 = PFImageView()
class ExplanationZoom: UIViewController, UIScrollViewDelegate {
var currentObject : PFObject?
@IBOutlet weak var image: PFImageView!
@IBOutlet weak var image2: PFImageView!
@IBOutlet weak var imageConstraintTop3: NSLayoutConstraint!
@IBOutlet weak var imageConstraintRight3: NSLayoutConstraint!
@IBOutlet weak var imageConstraintLeft3: NSLayoutConstraint!
@IBOutlet weak var imageConstraintBottom3: NSLayoutConstraint!
@IBOutlet weak var imageConstraintLeft4: NSLayoutConstraint!
@IBOutlet weak var imageConstraintTop4: NSLayoutConstraint!
@IBOutlet weak var imageConstraintRight4: NSLayoutConstraint!
@IBOutlet weak var imageConstraintBottom4: NSLayoutConstraint!
@IBAction func doneButton(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func moreInfovarcelltableViewdequeueReusableCellWithIdentifierCustomCellasCustomCellifcellnilcellCustomCellstyleUITableViewCellStyleDefaultreuseIdentifierCustomCellExtractvaluesfromthePFObjecttodisplayinthetablecellifletnameConditionobjectnameConditionasStringcellcustomNameConditiontextnameConditionDisplayflagimagevarinitialThumbnailUIImagenamedquestioncellcustomImageimageinitialThumbnailifletthumbnailobjectimageasPFFilecellcustomImagefilethumbnailcellcustomImageloadInBackgroundreturncell(sender: UIButton) {
}
@IBOutlet weak var imageSizeToggleButton: UIButton!
@IBOutlet weak var scrollView: UIScrollView!
var lastZoomScale: CGFloat = -1
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
scrollView.delegate = self
var gesture: UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:")
gesture.minimumPressDuration = 1.0
self.view.addGestureRecognizer(gesture)
updateZoom()
updateZoom2()
SwiftSpinner.show("Loading Image...")
// Unwrap the current object object
if let object = currentObject {
var initialThumbnail = UIImage(named: "question")
image.image = initialThumbnail
if let thumbnail = object["Image"] as? PFFile {
image.file = thumbnail
image.loadInBackground()
var imageView = PFImageView(frame: CGRectMake(self.scrollView.frame.width, 0, self.scrollView.frame.width, 50))
imageView.backgroundColor = UIColor.blackColor()
imageView.clipsToBounds = true
imageView.userInteractionEnabled = true
imageView.contentMode = .Center
imageView.contentMode = .ScaleAspectFill
imageView.autoresizingMask = (.FlexibleBottomMargin | .FlexibleHeight | .FlexibleLeftMargin | .FlexibleRightMargin | .FlexibleTopMargin | .FlexibleWidth)
scrollView.addSubview(image)
image.loadInBackground()
var imgView = UIImage (named: "image")
updateConstraints()
updateViewConstraints()
}
if let thumbnail2 = object["pressImage"] as? PFFile {
image2.file = thumbnail2
image2.loadInBackground()
var imgView = UIImage (named: "image2")
var imageView = PFImageView(frame: CGRectMake(self.scrollView.frame.width, 0, self.scrollView.frame.width, 50))
imageView.backgroundColor = UIColor.blackColor()
imageView.clipsToBounds = true
imageView.userInteractionEnabled = true
imageView.contentMode = .Center
imageView.contentMode = .ScaleAspectFill
imageView.autoresizingMask = (.FlexibleBottomMargin | .FlexibleHeight | .FlexibleLeftMargin | .FlexibleRightMargin | .FlexibleTopMargin | .FlexibleWidth)
scrollView.addSubview(image2)
image2.loadInBackground()
//updateConstraints2()
updateViewConstraints()
//image2.hidden = true
}
updateZoom()
updateZoom2()
}
updateZoom()
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
func longPressed(longPress: UIGestureRecognizer){
if (longPress.state == UIGestureRecognizerState.Ended) {
println("Ended")
image.hidden = false
image2.hidden = true
}
else if (longPress.state == UIGestureRecognizerState.Began){
println("Began")
image.hidden = true
image2.hidden = false
}
}
func update() {
SwiftSpinner.hide()
}
override func willAnimateRotationToInterfaceOrientation(
toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
super.willAnimateRotationToInterfaceOrientation(toInterfaceOrientation, duration: duration)
updateZoom()
updateZoom2()
}
func updateConstraints() {
if let image = image.image {
let imageWidth = image.size.width
let imageHeight = image.size.height
let viewWidth = view.bounds.size.width
let viewHeight = view.bounds.size.height
NSLog ("\(scrollView)")
// center image if it is smaller than screen
var hPadding = (viewWidth - scrollView.zoomScale * imageWidth) / 2
if hPadding < 0 { hPadding = 0 }
var vPadding = (viewHeight - scrollView.zoomScale * imageHeight) / 2
if vPadding < 0 { vPadding = 0 }
NSLog ("\(imageConstraintBottom3)")
imageConstraintLeft3.constant = hPadding
imageConstraintRight3.constant = hPadding
imageConstraintTop3.constant = vPadding
imageConstraintBottom3.constant = vPadding
}
if let image2 = image2.image {
let imageWidth2 = image2.size.width
let imageHeight2 = image2.size.height
let viewWidth = view.bounds.size.width
let viewHeight = view.bounds.size.height
var hPadding2 = (viewWidth - scrollView.zoomScale * imageWidth2) / 2
if hPadding2 < 0 { hPadding2 = 0 }
var vPadding2 = (viewHeight - scrollView.zoomScale * imageHeight2) / 2
if vPadding2 < 0 { vPadding2 = 0 }
NSLog ("\(imageConstraintBottom3)")
imageConstraintLeft4.constant = hPadding2
imageConstraintRight4.constant = hPadding2
imageConstraintTop4.constant = vPadding2
imageConstraintBottom4.constant = vPadding2
// Makes zoom out animation smooth and starting from the right point not from (0, 0)
view.layoutIfNeeded()
}
}
// Zoom to show as much image as possible unless image is smaller than screen
private func updateZoom() {
if let image = image.image {
var minZoom = min(view.bounds.size.width / image.size.width,
view.bounds.size.height / image.size.height)
NSLog ("\(minZoom)")
if minZoom > 1 { minZoom = 1 }
scrollView.minimumZoomScale = minZoom
// Force scrollViewDidZoom fire if zoom did not change
if minZoom == lastZoomScale { minZoom += 0.000001 }
scrollView.zoomScale = minZoom
lastZoomScale = minZoom
}
}
private func updateZoom2() {
if let image2 = image2.image {
var minZoom = min(view.bounds.size.width / image2.size.width,
view.bounds.size.height / image2.size.height)
NSLog ("\(minZoom)")
if minZoom > 1 { minZoom = 1 }
scrollView.minimumZoomScale = minZoom
// Force scrollViewDidZoom fire if zoom did not change
if minZoom == lastZoomScale { minZoom += 0.000001 }
scrollView.zoomScale = minZoom
lastZoomScale = minZoom
}
}
@IBAction func onImageSizeToggleButtonTapped(sender: AnyObject) {
imageSizeToggleButton.selected = !imageSizeToggleButton.selected
imageSizeToggleButton.invalidateIntrinsicContentSize()
let fileName = imageSizeToggleButton.selected ?
imageScrollSmallImageName2 : imageScrollLargeImageName2
image.image = UIImage()
updateZoom()
updateZoom2()
}
// UIScrollViewDelegate
// -----------------------
func scrollViewDidZoom(scrollView: UIScrollView) {
updateConstraints()
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return ??????
}}