Add a scrollable and zoomable image view
This commit is contained in:
parent
e1d869ffdc
commit
866a378c8d
2 changed files with 69 additions and 14 deletions
|
@ -354,18 +354,59 @@ Dk51bWJlciBvZiBMYXllcnM
|
|||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ipM-NH-wUM">
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O48-im-AhA">
|
||||
<rect key="frame" x="198" y="127" width="84" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Please wait..." id="Kok-lN-RvC">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" allowsMagnification="YES" minMagnification="1" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uGT-cg-c7j">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="chN-IE-x52"/>
|
||||
<connections>
|
||||
<segue destination="qzy-T7-vHd" kind="show" identifier="showTimelapse" id="x99-kP-axt"/>
|
||||
</connections>
|
||||
<clipView key="contentView" drawsBackground="NO" id="Roy-oU-Le6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view id="hNn-Aa-CKW">
|
||||
<rect key="frame" x="0.0" y="0.0" width="485" height="269"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="y0M-Hn-T88">
|
||||
<rect key="frame" x="0.0" y="0.0" width="485" height="269"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="tHf-wP-P5i"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="y0M-Hn-T88" secondAttribute="trailing" id="Sdu-6P-R1c"/>
|
||||
<constraint firstItem="y0M-Hn-T88" firstAttribute="top" secondItem="hNn-Aa-CKW" secondAttribute="top" id="ady-cn-4PV"/>
|
||||
<constraint firstItem="y0M-Hn-T88" firstAttribute="leading" secondItem="hNn-Aa-CKW" secondAttribute="leading" id="cLP-tg-Yig"/>
|
||||
<constraint firstAttribute="bottom" secondItem="y0M-Hn-T88" secondAttribute="bottom" id="y9b-EB-Ayo"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="C44-w5-6zH">
|
||||
<rect key="frame" x="0.0" y="254" width="480" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="YYV-ak-nuJ">
|
||||
<rect key="frame" x="464" y="0.0" width="16" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="uGT-cg-c7j" firstAttribute="centerY" secondItem="O48-im-AhA" secondAttribute="centerY" id="1Ok-fG-D0h"/>
|
||||
<constraint firstItem="O48-im-AhA" firstAttribute="centerY" secondItem="ERx-hH-rdd" secondAttribute="centerY" id="37m-I2-CEB"/>
|
||||
<constraint firstItem="uGT-cg-c7j" firstAttribute="leading" secondItem="ERx-hH-rdd" secondAttribute="leading" id="CU5-lz-k01"/>
|
||||
<constraint firstItem="uGT-cg-c7j" firstAttribute="top" secondItem="ERx-hH-rdd" secondAttribute="top" id="kVI-CM-NkV"/>
|
||||
<constraint firstItem="O48-im-AhA" firstAttribute="centerX" secondItem="ERx-hH-rdd" secondAttribute="centerX" id="m1F-HX-aB9"/>
|
||||
<constraint firstItem="uGT-cg-c7j" firstAttribute="centerX" secondItem="O48-im-AhA" secondAttribute="centerX" id="naX-FM-6aN"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="imageView" destination="ipM-NH-wUM" id="RT5-09-Hwj"/>
|
||||
<outlet property="imageView" destination="y0M-Hn-T88" id="Wch-Vz-0ui"/>
|
||||
<segue destination="wda-Mt-beD" kind="sheet" identifier="showInfo" id="obo-Yt-yny"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
|
|
|
@ -1,21 +1,35 @@
|
|||
import Foundation
|
||||
import Cocoa
|
||||
import Quartz
|
||||
|
||||
class ViewController: NSViewController {
|
||||
@IBOutlet weak var imageView: NSImageView!
|
||||
@IBOutlet weak var loadingField: NSTextField!
|
||||
|
||||
override func viewDidLoad() {
|
||||
|
||||
imageView.setContentCompressionResistancePriority(
|
||||
.defaultLow,
|
||||
for: .horizontal)
|
||||
|
||||
imageView.setContentCompressionResistancePriority(
|
||||
.defaultLow,
|
||||
for: .vertical)
|
||||
|
||||
}
|
||||
|
||||
override func viewWillAppear() {
|
||||
let document = self.view.window?.windowController?.document as? Document
|
||||
|
||||
DispatchQueue.main.async {
|
||||
let image = document?.makeComposite()
|
||||
|
||||
//DispatchQueue.main.sync {
|
||||
self.imageView.image = image
|
||||
//}
|
||||
guard let image = document?.makeComposite() else {
|
||||
//self.loadingField.stringValue = "Failed to load."
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
self.imageView.image = image
|
||||
//self.loadingField.isHidden = true
|
||||
}
|
||||
}
|
||||
|
||||
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
|
||||
|
|
Reference in a new issue