Skip to content
This repository was archived by the owner on May 18, 2021. It is now read-only.

Commit c29717f

Browse files
committed
Project 09 commit
1 parent 429e09f commit c29717f

File tree

2 files changed

+99
-7
lines changed

2 files changed

+99
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,84 @@
1-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
3+
<device id="retina4_7" orientation="portrait">
4+
<adaptation id="fullscreen"/>
5+
</device>
36
<dependencies>
4-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
7+
<deployment identifier="iOS"/>
8+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
59
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
610
</dependencies>
711
<scenes>
812
<!--View Controller-->
913
<scene sceneID="tne-QT-ifu">
1014
<objects>
11-
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
15+
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="ImageScroller" customModuleProvider="target" sceneMemberID="viewController">
1216
<layoutGuides>
1317
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
1418
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
1519
</layoutGuides>
1620
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
1721
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
1822
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
23+
<subviews>
24+
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="steve" translatesAutoresizingMaskIntoConstraints="NO" id="c1Z-YN-x07">
25+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
26+
</imageView>
27+
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qq4-74-0Vn">
28+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
29+
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="XNe-fG-Ogs">
30+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
31+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
32+
</view>
33+
<blurEffect style="dark"/>
34+
</visualEffectView>
35+
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" maximumZoomScale="3" translatesAutoresizingMaskIntoConstraints="NO" id="EtR-Gn-iSu">
36+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
37+
<subviews>
38+
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="steve" translatesAutoresizingMaskIntoConstraints="NO" id="IgF-Xp-yef">
39+
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
40+
</imageView>
41+
</subviews>
42+
<constraints>
43+
<constraint firstItem="IgF-Xp-yef" firstAttribute="centerY" secondItem="EtR-Gn-iSu" secondAttribute="centerY" id="AZR-jr-Zfo"/>
44+
<constraint firstItem="IgF-Xp-yef" firstAttribute="top" secondItem="EtR-Gn-iSu" secondAttribute="top" priority="750" id="Iyq-Gw-K0n"/>
45+
<constraint firstAttribute="trailing" secondItem="IgF-Xp-yef" secondAttribute="trailing" priority="750" id="RrQ-Uc-vcq"/>
46+
<constraint firstItem="IgF-Xp-yef" firstAttribute="centerX" secondItem="EtR-Gn-iSu" secondAttribute="centerX" id="hHY-HM-B14"/>
47+
<constraint firstAttribute="bottom" secondItem="IgF-Xp-yef" secondAttribute="bottom" priority="750" id="lox-j4-Rbk"/>
48+
<constraint firstItem="IgF-Xp-yef" firstAttribute="leading" secondItem="EtR-Gn-iSu" secondAttribute="leading" priority="750" id="ykR-xb-tA2"/>
49+
</constraints>
50+
<connections>
51+
<outlet property="delegate" destination="BYZ-38-t0r" id="PyT-nD-z33"/>
52+
</connections>
53+
</scrollView>
54+
</subviews>
1955
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
56+
<constraints>
57+
<constraint firstItem="Qq4-74-0Vn" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="5o1-DN-Jbs"/>
58+
<constraint firstAttribute="trailing" secondItem="c1Z-YN-x07" secondAttribute="trailing" id="EFk-u0-WVs"/>
59+
<constraint firstAttribute="trailing" secondItem="Qq4-74-0Vn" secondAttribute="trailing" id="FEJ-3G-gLe"/>
60+
<constraint firstItem="c1Z-YN-x07" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="HL8-dc-NT2"/>
61+
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="EtR-Gn-iSu" secondAttribute="bottom" id="N5Y-Uc-Swf"/>
62+
<constraint firstAttribute="trailing" secondItem="EtR-Gn-iSu" secondAttribute="trailing" id="Pmr-Jt-ngx"/>
63+
<constraint firstItem="Qq4-74-0Vn" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="QCe-1G-AMW"/>
64+
<constraint firstItem="c1Z-YN-x07" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="Sa0-8U-dId"/>
65+
<constraint firstItem="EtR-Gn-iSu" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="Vlb-vo-g6i"/>
66+
<constraint firstItem="EtR-Gn-iSu" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="YDw-HI-hZw"/>
67+
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="c1Z-YN-x07" secondAttribute="bottom" id="bbo-OC-ClB"/>
68+
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="Qq4-74-0Vn" secondAttribute="bottom" id="pje-PL-8yq"/>
69+
</constraints>
2070
</view>
71+
<connections>
72+
<outlet property="imageView" destination="IgF-Xp-yef" id="5gx-Ov-3l2"/>
73+
<outlet property="scrollView" destination="EtR-Gn-iSu" id="Cej-ne-dLT"/>
74+
</connections>
2175
</viewController>
2276
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
2377
</objects>
78+
<point key="canvasLocation" x="154" y="125"/>
2479
</scene>
2580
</scenes>
81+
<resources>
82+
<image name="steve" width="320" height="320"/>
83+
</resources>
2684
</document>

Project 09 -ImageScroller/ImageScroller/ViewController.swift

+37-3
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,52 @@
88

99
import UIKit
1010

11-
class ViewController: UIViewController {
11+
class ViewController: UIViewController,UIScrollViewDelegate {
12+
13+
override var preferredStatusBarStyle: UIStatusBarStyle {
14+
return UIStatusBarStyle.lightContent
15+
}
1216

17+
@IBOutlet weak var imageView: UIImageView!
18+
@IBOutlet weak var scrollView: UIScrollView!
19+
1320
override func viewDidLoad() {
1421
super.viewDidLoad()
1522
// Do any additional setup after loading the view, typically from a nib.
23+
/*
24+
storyboard里面Visual Effect View结合最底层imageview做到图片模糊背景,Visual Effect View设置了blur style
25+
设置scrollView.minimumZoomScale = 1,scrollView.maximumZoomScale = 3
26+
设置约束
27+
设置scrollView代理
28+
29+
最终实现imageView在屏幕中心位置放大缩小
30+
*/
1631
}
32+
33+
1734

1835
override func didReceiveMemoryWarning() {
1936
super.didReceiveMemoryWarning()
2037
// Dispose of any resources that can be recreated.
2138
}
22-
23-
39+
40+
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
41+
//只有 scrollview的delegate复写了viewForZoomingInScrollView scrollview才会缩放。
42+
return imageView
43+
}
44+
45+
func scrollViewDidZoom(_ scrollView: UIScrollView) {
46+
recenterImage()
47+
}
48+
49+
func recenterImage() {
50+
//重新设置scrollView的中心点
51+
let scrollViewSize = scrollView.bounds.size
52+
let imageViewSize = imageView.frame.size
53+
let horizontalSpace = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2.0 : 0
54+
let verticalSpace = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.width) / 2.0 :0
55+
56+
scrollView.contentInset = UIEdgeInsetsMake(verticalSpace, horizontalSpace, verticalSpace, horizontalSpace)
57+
}
2458
}
2559

0 commit comments

Comments
 (0)