From 544f1a1801159a84a316d87417b23f108e4bc73c Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Sun, 31 Jan 2016 03:10:39 -0800 Subject: [PATCH] Displays dummy data in SaveStatesViewController --- .../GridCollectionViewCell.swift | 3 +- .../GridCollectionViewLayout.swift | 6 +- .../PausePresentationController.swift | 12 +++- .../SaveStatesViewController.swift | 65 ++++++++++++++++++ .../DeltaPlaceholder.imageset/Contents.json | 23 +++++++ .../DeltaPlaceholder.png | Bin 0 -> 4488 bytes .../DeltaPlaceholder@2x.png | Bin 0 -> 11232 bytes .../DeltaPlaceholder@3x.png | Bin 0 -> 19231 bytes 8 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 Resources/Assets.xcassets/DeltaPlaceholder.imageset/Contents.json create mode 100644 Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder.png create mode 100644 Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder@2x.png create mode 100644 Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder@3x.png diff --git a/Common/Collection View/GridCollectionViewCell.swift b/Common/Collection View/GridCollectionViewCell.swift index 8906bd3..eb8a6eb 100644 --- a/Common/Collection View/GridCollectionViewCell.swift +++ b/Common/Collection View/GridCollectionViewCell.swift @@ -50,6 +50,7 @@ class GridCollectionViewCell: UICollectionViewCell self.contentView.clipsToBounds = false self.imageView.translatesAutoresizingMaskIntoConstraints = false + self.imageView.contentMode = .ScaleAspectFit #if os(tvOS) self.imageView.adjustsImageWhenAncestorFocused = true #endif @@ -135,7 +136,7 @@ private extension GridCollectionViewCell self.imageViewWidthConstraint.constant = self.maximumImageSize.width self.imageViewHeightConstraint.constant = self.maximumImageSize.height - self.textLabelVerticalSpacingConstraint.constant = self.maximumImageSize.height / 10.0 + self.textLabelVerticalSpacingConstraint.constant = 8 self.textLabelFocusedVerticalSpacingConstraint?.constant = self.maximumImageSize.height / 10.0 } } \ No newline at end of file diff --git a/Common/Collection View/GridCollectionViewLayout.swift b/Common/Collection View/GridCollectionViewLayout.swift index 0467743..048ee1e 100644 --- a/Common/Collection View/GridCollectionViewLayout.swift +++ b/Common/Collection View/GridCollectionViewLayout.swift @@ -12,7 +12,11 @@ class GridCollectionViewLayout: UICollectionViewFlowLayout { var itemWidth: CGFloat = 150 { didSet { - self.invalidateLayout() + // Only invalidate if needed, otherwise could potentially cause endless loop + if oldValue != self.itemWidth + { + self.invalidateLayout() + } } } diff --git a/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift b/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift index 19764da..20bf6f7 100644 --- a/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift +++ b/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift @@ -39,13 +39,19 @@ class PausePresentationController: UIPresentationController { guard let containerView = self.containerView else { return super.frameOfPresentedViewInContainerView() } - var contentHeight = self.presentedViewController.preferredContentSize.height + let frame: CGRect + let contentHeight = self.presentedViewController.preferredContentSize.height + if contentHeight == 0 { - contentHeight = containerView.bounds.height - UIApplication.sharedApplication().statusBarFrame.height + let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height + frame = CGRect(x: 0, y: statusBarHeight, width: containerView.bounds.width, height: containerView.bounds.height - statusBarHeight) + } + else + { + frame = CGRect(x: 0, y: containerView.bounds.height - contentHeight, width: containerView.bounds.width, height: containerView.bounds.height) } - let frame = CGRect(x: 0, y: containerView.bounds.height - contentHeight, width: containerView.bounds.width, height: containerView.bounds.height) return frame } diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index da7ab84..8065915 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -10,25 +10,90 @@ import UIKit import Roxas +private let SaveStatesViewControllerContentInset: CGFloat = 20 + class SaveStatesViewController: UICollectionViewController { private var backgroundView: RSTBackgroundView! + private var prototypeCell = GridCollectionViewCell() + private var prototypeCellWidthConstraint: NSLayoutConstraint! +} + +extension SaveStatesViewController +{ override func viewDidLoad() { super.viewDidLoad() self.backgroundView = RSTBackgroundView(frame: self.view.bounds) + self.backgroundView.hidden = true self.backgroundView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] self.backgroundView.textLabel.text = NSLocalizedString("No Save States", comment: "") self.backgroundView.textLabel.textColor = UIColor.whiteColor() self.backgroundView.detailTextLabel.text = NSLocalizedString("You can create a new save state by pressing the + button in the top right.", comment: "") self.backgroundView.detailTextLabel.textColor = UIColor.whiteColor() self.view.insertSubview(self.backgroundView, atIndex: 0) + + // We update the layout in code because we need to use our SaveStatesViewControllerContentInset constant + // The reason for this is we cannot query the layout for its sectionInset in viewDidLayoutSubviews, so might as well be explicit in code with a constant + // Otherwise, we could configure this all in Interface Builder, but we'd still need to hardcode 20 in for viewDidLayoutSubviews + let collectionViewLayout = self.collectionViewLayout as! GridCollectionViewLayout + collectionViewLayout.sectionInset = UIEdgeInsets(top: SaveStatesViewControllerContentInset, left: SaveStatesViewControllerContentInset, bottom: SaveStatesViewControllerContentInset, right: SaveStatesViewControllerContentInset) + collectionViewLayout.minimumInteritemSpacing = SaveStatesViewControllerContentInset + collectionViewLayout.minimumLineSpacing = SaveStatesViewControllerContentInset + + let portraitScreenWidth = UIScreen.mainScreen().coordinateSpace.convertRect(UIScreen.mainScreen().bounds, toCoordinateSpace: UIScreen.mainScreen().fixedCoordinateSpace).width + collectionViewLayout.itemWidth = (portraitScreenWidth - ((SaveStatesViewControllerContentInset) * 3)) / 2 + + // Manually update prototype cell properties + self.prototypeCellWidthConstraint = self.prototypeCell.contentView.widthAnchor.constraintEqualToConstant(collectionViewLayout.itemWidth) + self.prototypeCellWidthConstraint.active = true } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } +} + +private extension SaveStatesViewController +{ + func configureCollectionViewCell(cell: GridCollectionViewCell, forIndexPath indexPath: NSIndexPath) + { + cell.imageView.backgroundColor = UIColor.whiteColor() + cell.imageView.image = UIImage(named: "DeltaPlaceholder") + + cell.maximumImageSize = CGSizeMake(self.prototypeCellWidthConstraint.constant, (self.prototypeCellWidthConstraint.constant / 4.0) * 3.0) + + cell.textLabel.textColor = UIColor.whiteColor() + cell.textLabel.font = UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline) + cell.textLabel.text = "Save State" + } +} + +extension SaveStatesViewController +{ + override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int + { + return 12 + } + + override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell + { + let cell = collectionView.dequeueReusableCellWithReuseIdentifier(RSTGenericCellIdentifier, forIndexPath: indexPath) as! GridCollectionViewCell + self.configureCollectionViewCell(cell, forIndexPath: indexPath) + return cell + } +} + +extension SaveStatesViewController: UICollectionViewDelegateFlowLayout +{ + func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize + { + self.configureCollectionViewCell(self.prototypeCell, forIndexPath: indexPath) + + let size = self.prototypeCell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) + return size + } } \ No newline at end of file diff --git a/Resources/Assets.xcassets/DeltaPlaceholder.imageset/Contents.json b/Resources/Assets.xcassets/DeltaPlaceholder.imageset/Contents.json new file mode 100644 index 0000000..8755372 --- /dev/null +++ b/Resources/Assets.xcassets/DeltaPlaceholder.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "DeltaPlaceholder.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "DeltaPlaceholder@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "DeltaPlaceholder@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder.png b/Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6a2a0ac8bb256b0d0c069b7e270bd805972437 GIT binary patch literal 4488 zcmd^D`8$+f+#VW?vKw2(Gz|uoWT(NzFw)q!d}Uv zMfQD<$dKJTUGIPKzCS$AeO=Gz`JC(ApL3tjb?y_budBs;@$y9g0Klw`)-a@E*S`lu zPkmRKSLILv=#0c50f3tLODDE;006tHwg%GJpJp@L&BNpeS0@h)d3BNQstx+dUH=zR zsjfoLiuKA(4A=?P;t-fTYySv|F(RVm-ha+Yr-SJY*5i7ot`m~`;n}*Kq@sG$=`LlM z{8d`oFf}&ege~8N5w@gPfxoT(I^_nRxxG*%uT0kVPM_DGulVgN{`Jz@D}w;R&uPQO zZ(;lE%^B(P)Qo9(ffr~l`ojU?{`hc=K7jrc?{iwgiyt9^^ERB|=g3?1dC#M0Z{ed9 zegf%i*kWnmv-tp~`Kv5)NNTD*;QvW#m=8JuOBYgq=0{o142|3P7{iUYuNvGeQWd=I zHKuy z#`x%h9D`5xxY$uX(KnngF)2b-pmKh7lKWs`-wenAyw9P z=^Auu2{6JpQo3LVN_aSUlen6ATiUC%vY89aZn8Jx0O_jCz*mhKA4_|Bdt4av$l_15 z{Fkzxc^$hd5)QS9Uc7-!Sajh>eAcnH*n4^tK4=}cc*2Z>X_+bct<$D}(+vIMe@)uk zcuNm?m)2KCis*J5o6!WIWDe&v}Pg>5`o>WYQxT(MSVot->Zr+y3nRWW+ z)jjn)f6>ec%0N2wMk4pu)@ypzZH8(zY#M6qXJT?B>437HPn|3Fe`?s@UVIM0VRJSW z^n`_re2P|*Y({<>#p(1BM@&(PZHzU)BmA)90G$6<&Kb>+w+O@K+0;KZ^7CuhAQb=d z6r}4GZAVi;;adI#BjJ&-Ln;Ix`*PTLcN{;c?iViB_88d(2jD=f{>7&PDXFQ0ouiVM z9HjL=ffYUHfm~pWj2`zk69oSe@Uyh{XT$68_e1hLG$`Ob9SA<3kVN6ll*@TSnabn^Ffu8S}G8O8{`N(y6ts2N|Yc z{HmHbzi)Ruu^$2>GX8ty1y^l)Td-6|?2(~j*%IviDHmDX6` zE1l1=>Sg0cgXDmpzF2<@O*0KzU1E)TD#cLUT2QE#44rh+IH3;V>H5Wae{KEdtM8Ma zj~_(BP)}9@dUu>Mh_O-lhg7vct0ew*uLwc43uL)>5XJi#0`4aYA@tduFENB3o5=Ev z<&D3@>rsDXX@>Q!)~Kv)DLe7)0OaE)hQ1i=?r;u#lOM7~jtK#y3kKs%s!PLMRa}WZpX+L=5C`A7IWvA=xXdsT3`uL%!{;_olQLag_v})m%2ft~&j3$ZgeuvQLig z&E4Q2WqqT;F~MCXYFIL)0-Ny2qmaYsP*r`WEvY=xKZa59Mmw=>VNr|}H#P^g!^8Wo z$_SrV>Ch9BO*8;SZ^jN>E78#yurG!n4tjq?ba$WbJtzj96Mv*^EVpX6c_$VSpjY)5 zcMWK8K{x40qTe!6Yl-gO9z(~=(A&8K1Vas%=LdIb*cPR4Sj1-)K3J00U~2P@H||$Y z+sQh5*skvx&5L>|a7R7(u(xjs%ey4OEW#y+SJ(loc)cbduqV7wC&1` zN=Xngd7E03tJDfa{Nex_V5`a}VO}mBMRO~Hq}PE=0`&J2x#GK~2JA3w5i<;mo~3b4 zec9ThSXC)O);oV6ZQ%8%3k4P|qhYHBpqYW&=W+Y72JZ&uSYHm-DRxB5bfgE<>Lu*W z^-x!az2;sILi4LYP*5=_bV~<%5HX-1scaFJ6OJCV55lsblq|G{A?~reC6f9(!wFqi zZsuL3Z8Rtzv58U{n}G7toJi&hhLHcOz%(o#C{dJ?JG z&Nr!>!wx)F4Zkh#4`zfRMdCudj%$|KHvl_NIBhTU?0l77NR)|YNNbH zgo^A@LR>AM<^Lm?P{|Zg3qUVMtIqZSyPaKb>Kl-<8B@~+W+aij9P`QO1ULsTZa7kS zMbItCp5>WGGBjps8Cv0}4`l-?Hv9&r%yf9iyM6J!lAEI=+E-`rY}$Xpl62o=$C8H& z!^mg=3uoCSg;J0V&#n|c@WbdSL~SZ7VG^*P$XZKp>sy-Z z)>T2raHu?wZQMf^XGU5q6TCTzJTHUoWR(=9+_T8BidrL0TO?6&*!qdMBJdu zd2hIk^BmKHWrMIs5@c^qgxaKP+P+zNP^BQLP1ueuogOIJ=w)B**G0v@N3zO&@)+>7 zGH|#JpD%jl4J2_EYNZrVH3<#GWyF*^D|37T+ipI*R08taJ}s!5%^^e6%*OaQhn=gS zx>iCBMF3p&;w?O)zr3T#oQMT;j56AHp*8HLIKEj5A68@lGkbTS+&7;9vq-&uqY@GpJzg@x5ar;{0DoK&D6&t#oGF?FsKp_$u$}6 zh++{1dCfLo^BFZ;iRO)15xn9&0hbQU;-b4}a_u$LNHnsveC5N=)kAVu&beS-fOWcK zmRljG0x|*X`z6UA-qit;zyf;&CV#_GISB=z(e}t~1X7KaZ0oOWPzVB(we@E>7nio_ zrLe|`Lp#V?zLrL6ModI57D-+EeFV>#P4ed#*}<5E;NOD9k=D7Ab_rRr(LR6NVg2-T zG-Fe~kr#JkNE;d7EgeQf_lI!RJq@-MqQmsooP{kGPqqw-db5yO)Q%)ufjnSTBzVM~ z2($=ywfM0Pq=6An;32Q+S3PTSNnk#VOP%t)L`8X_cG2n}odhM{G>tX^OVR#?<$$u5W+f1jyP-hEeW-ldU%4dI9atzwB*pX8n;pplJ9;|YTc3&a@hG8 ziXn%7TA++ftHvzeb4jww?Z^qevTEX7XeFHV>f8!j)}2AHZ237=4w4{BkH)&KyxX1< zSakF?)1V$v2c->S8IDi+Td#)LIIC}479OqfpfWhJV-9v+rsfJXA7`KH4ynhruZ|sw z>d9FcrEck%fl+@t;BSwwgc`J)0ZHYanSw{gr%|e>BbN!=Ju&MgbiW_{IQX^JBwJEu zd-?5d?lCQr6_Y5WT4T$LGJN+S18S+$3Op>z|JxIIAGnJJjJFu8*7ld5W$L?qtqtjr zlR71*hA>+5M)WBZJgPGfbC-{LG86M{SrHfiGcKy_ICn3>*V7057J7dH z@wb1u|C_ANdW95T2Guyy@S>jnus18Jqt_6da2SxDp8A*zC0CJ@8RJp;m|23E+CR>; zm&Q9ciRheJ%XU+Oxl6*+o)8d)cX8pQ!JyD{&&|&FsG*D;XPb?jK0Vfz{mUyX@*!8U zoZc;Pb3Uz-PwNg(H@^|YP@+n4bh_b9FJvZTFAqN(&U}++B#uA(N8p)HiR?lt$?m;* zbK`yks_C-KNPA@MLwED0cfVBJ#vSa{r?CrZWjJCz=B26HUQ~S%v_5&$6u5*gC4^rXH_XlBsC4q~To1^&DBqg;FV@TJkJ$ zQKf5@048W9{EuQ0)r=b}4)D29&AAIIu}_SOC10a^(Gq}gv;-kYR}2uYV4~}z`F~>y b2dY`Ni*W=itxwde6@WHMSEK5#4eoycfO#EL literal 0 HcmV?d00001 diff --git a/Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder@2x.png b/Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cce81d53eb875891c0ab22a49df9fb75c41d6ca GIT binary patch literal 11232 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 TDkbpA?gfQMDsqL$7ykbPzwiuu literal 0 HcmV?d00001 diff --git a/Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder@3x.png b/Resources/Assets.xcassets/DeltaPlaceholder.imageset/DeltaPlaceholder@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccc7a8ce061431483943be859bd1ee43d6ef7d2 GIT binary patch literal 19231 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 literal 0 HcmV?d00001