From fa7f83518825240dac2ee88713a260db651698a6 Mon Sep 17 00:00:00 2001 From: terenceLuffy Date: Thu, 15 Sep 2016 15:11:45 -0400 Subject: [PATCH] Add support to nib Add support to nib, just change the class on nib file to ASHorizontalScrollView --- ASHorizontalScrollViewForObjectiveC.podspec | 4 +- .../project.pbxproj | 16 ++++- .../UserInterfaceState.xcuserstate | Bin 27594 -> 28260 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 24 ++++---- .../xcschemes/ScrollViewSample.xcscheme | 2 +- .../ASHorizontalScrollView.m | 56 ++++++++++++------ .../ASHorizontalScrollViewDelegate.m | 5 +- .../ASHorizontalScrollView.m | 56 ++++++++++++------ .../ASHorizontalScrollViewDelegate.m | 5 +- 9 files changed, 110 insertions(+), 58 deletions(-) diff --git a/ASHorizontalScrollViewForObjectiveC.podspec b/ASHorizontalScrollViewForObjectiveC.podspec index da3a379..350019e 100644 --- a/ASHorizontalScrollViewForObjectiveC.podspec +++ b/ASHorizontalScrollViewForObjectiveC.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "ASHorizontalScrollViewForObjectiveC" - s.version = "1.2" + s.version = "1.3" s.summary = "App store style horizontal scroll view Objective-C" s.description = <<-DESC It acts similar to apps sliding behaviours in App store. There are both Objective-C and Swift version available and they perform exactly the same function, please find whichever you like. @@ -20,6 +20,6 @@ Pod::Spec.new do |s| s.author = { "Weiwei Chen" => "terenceluffy@gmail.com" } s.platform = :ios, "8.0" s.ios.deployment_target = "8.0" - s.source = { :git => 'https://github.com/terenceLuffy/AppStoreStyleHorizontalScrollView.git', :tag => "1.2" } + s.source = { :git => 'https://github.com/terenceLuffy/AppStoreStyleHorizontalScrollView.git', :tag => "1.3" } s.source_files = 'Sources/ASHorizontalScrollView/*' end diff --git a/ScrollViewSample/ScrollViewSample.xcodeproj/project.pbxproj b/ScrollViewSample/ScrollViewSample.xcodeproj/project.pbxproj index 6b9d287..477e483 100644 --- a/ScrollViewSample/ScrollViewSample.xcodeproj/project.pbxproj +++ b/ScrollViewSample/ScrollViewSample.xcodeproj/project.pbxproj @@ -221,7 +221,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = SA; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = Zuse; TargetAttributes = { 7402EE06193BB82D00B1C37D = { @@ -351,14 +351,19 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -391,13 +396,18 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -419,7 +429,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "ScrollViewSample/ScrollViewSample-Prefix.pch"; INFOPLIST_FILE = "ScrollViewSample/ScrollViewSample-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; PRODUCT_BUNDLE_IDENTIFIER = "Zuse.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; @@ -434,7 +444,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "ScrollViewSample/ScrollViewSample-Prefix.pch"; INFOPLIST_FILE = "ScrollViewSample/ScrollViewSample-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; PRODUCT_BUNDLE_IDENTIFIER = "Zuse.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; diff --git a/ScrollViewSample/ScrollViewSample.xcodeproj/project.xcworkspace/xcuserdata/terencechen.xcuserdatad/UserInterfaceState.xcuserstate b/ScrollViewSample/ScrollViewSample.xcodeproj/project.xcworkspace/xcuserdata/terencechen.xcuserdatad/UserInterfaceState.xcuserstate index 5e14a504fde1ac91a8e7a03e4c9a33ae94c3590d..f6a9a5cd8facd2b0e77d31f688461a24e4ca834b 100644 GIT binary patch literal 28260 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 XVZ_@uFqME%{43Fkf9=0Vy!-zEo91aS literal 27594 zcmdsf2Ygh;*7(faw&|N*Hht6UZrX0B*<`aJ2}vNEgd~)>Nfr`GGX)4mXT(Cci(-L< z&_x8LBUXx?rXY$GQ4|Cb6|C@|yEmJH!RPn=-h2A}E!o{WbI+VPbLRA!%BH&7mR6PO z2!H?q2C#qwyzE)o($bJA=H`~##)i_6#>(5xRjn;$A*SZ4np*m}D5SNq$pygsmThoG z^MC+kz!kUwcMu7pKs1N}u^#;3zl-J_BdLd2ktAg*+6X4B9|jXb0_~1N4Mm&>Q+de;5FjFa(CeFgOGb zg~Q-*mm2eeY4WEY_;AXf5z6xK1ufsRsKKL;_4nKjP!V~Z_coLq1r{P6-34RMN z!|&h~_&xjqUWYdjkL-~gxgjs)i~LXk3PoWk3dNy#l#H}!2pWpAQ4Y#QBT*hIL*-~J z8i&TC+t5Tb3Du)!G#$-AGtoWhUUVOthaN-^p~um)XenBTR--j&E!u=$MsJ|E(fjBS z`Uo9IpP-ZIEcyz4gD#^V83)FZabo0*GvmUzGH#4JQ;uxr1qDrZY2`nathH9A**oD6@olis@ihFq@ez z%vNR_vz^(&>}2*a`?iD}>^TR{oAcomTsRlOMRHMG zG^gfLxMAFIE{hw%<#Pp`kt^dSa1*&nTq8G^o5#)P7H|u>Mcf12gWN;h!`vg>qujIH zQf?X7!L8xebI)^|xEHxsxL3K?xYxNixP9Dy?tSh9?f~~GcY^zjJIS5mPIG6tFS&Ev z1@0R66L+1rB<@^M`g0JGM z`5L~Kujd>1>HG|SCO?b6lfR3{JmDAei}(ll2l=P@XZUCNwfs8%IetC=Jimc|f#1l# z%}L!!mGk-!t25t z!kfY#VXv@H*e|>#ye+&VyeoVp92JfU9}B023&J%ZAIcWVy1DvQe_pvNBn@Y^-dYY`n}Y zYnDxsO_j}%&6Hu;J+gacb7k{ni)0VT9+5pNdqVc4?3v<_hPJx8!@vgE0y|(2oPf)i zd}G{Xb9+lU{p^;gB_UOHrk0jY-~b#k!b~TS182+6I)aYZA z(hY{#be%RaHa#Unld3f&>XJ433b|XhK66ZC^W>H$Q;VEm#A@IP zynr|G0Se#?{D42^FpmW+!#3C!+hP0FAP@wBV4$Rk_<%4Fh8?gY{sezYk&c**tW>dYnLO!hTutlcIjK+r6=Ek}@b8|(KDoLeJ*Jxrh^=fr&Qieejo31sa z$7)km>hwfaN>XM@Vud`20w`#%HaDBAd(iI(r{zxvQR!7l$y!xPY-U1|Ha01V4yVn` z)Ws(1QgkYHs$Qp4r&P#e`eG^J--~E*L+u@H=Im-puiA;V6mfX~?XIh8r8;h4lq%%j zB0viriW(d1DoxGVEhV)rwUu?0BwoF3rpokwP3|*hsA2+>X2k@~P$y{VSB)ld)-3BP zC4ylfVl7Al$sh%2fEJ{JL0~W#0)}EIEXU5+1-oK5?2bLKC-zzkhSN3Dfpm}o^dJ)$ zKo%H*z3D0`urH3pwYUYR;VF13ju=ZZqBI?8sx;SC$mR5xv8HiqzG+JBBvWf6ov??l zrG@H$Q$uTJbuE3;GSbxE*w$Jhj}_-)<*I(mQrucwSKHdIYc`vV)OctusWnfPVE4ck z+is$LKM;CzOYNkFeh|iqVD#q7wn>x3g|MP34OVMz5&4h8Fx1wWN10k{#?zk?#v+ul zb+uLIh8A;N>$FxIIk1wo6qJLA4p4^uI>1=$k0UDN&iay~9;~xl&GjvZEIYIURCa>f zfC&fSP#kUrPz@#lmrh^?6LBC8>I5~Q76)S`4jE6u^yM2l{Vh%)&orr_wzaL=JW82% z=K&!8a|kqnJ3upNDVH{T1KmBP(pPiKxO}6&mhxL;gQ>Z_llE#Y%{LZU%q=SpQ$YJo zILx3pgy9fn+T^r8Bise>gnVOOTdRrkqOQ5w)V>_t1qf)Ra>w#hLS#0$r$X-9)3JB- z$Ja$u{uxwc`F)ZLeMH)iA+TTQKPEj?|S4dN

9bg02h#ErdT4JiB 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 diff --git a/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index a697d0d..63d61b4 100644 --- a/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -10,13 +10,13 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "ScrollViewSample/ASHorizontalScrollView/ASHorizontalScrollView.m" - timestampString = "471368133.411753" + timestampString = "495658850.55322" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "97" - endingLineNumber = "97" + startingLineNumber = "114" + endingLineNumber = "114" landmarkName = "-calculateMarginBetweenItems" - landmarkType = "5"> + landmarkType = "7"> + landmarkType = "7"> + landmarkType = "7"> diff --git a/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcschemes/ScrollViewSample.xcscheme b/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcschemes/ScrollViewSample.xcscheme index d917a81..60959de 100644 --- a/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcschemes/ScrollViewSample.xcscheme +++ b/ScrollViewSample/ScrollViewSample.xcodeproj/xcuserdata/terencechen.xcuserdatad/xcschemes/ScrollViewSample.xcscheme @@ -1,6 +1,6 @@ item.frame.size.width/2) { diff --git a/Sources/ASHorizontalScrollView/ASHorizontalScrollView.m b/Sources/ASHorizontalScrollView/ASHorizontalScrollView.m index 9caa998..aa3014c 100644 --- a/Sources/ASHorizontalScrollView/ASHorizontalScrollView.m +++ b/Sources/ASHorizontalScrollView/ASHorizontalScrollView.m @@ -8,6 +8,7 @@ * Edit by WEIWEI CHEN 14-9-21: fix problems to work on xcode 6.0.1 * Edit by WEIWEI CHEN 15-12-09: add comments on functions, remove scale when calculating margin, it seems that the behaviour in iOS 9 change the way of align views * Edit by WEIWEI CHEN 16-05-17: fix removeItemAtIndex last index crash bug + * Edit by WEIWEI CHEN 16-09-15: add support to nib, just change the class on nib file to ASHorizontalScrollView * * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -29,28 +30,40 @@ - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - _items = [NSMutableArray array]; - - //default item size is 80% of height - _uniformItemSize = CGSizeMake(frame.size.height*0.8, frame.size.height*0.8); - - //default attributes - _leftMarginPx = kDefaultLeftMargin; - _miniMarginPxBetweenItems = kMinMarginBetweenItems; - _miniAppearPxOfLastItem = kMinWidthAppearOfLastItem; - - //get default item margin - [self setItemsMarginOnce]; - - [self setShowsHorizontalScrollIndicator:NO]; - [self setDecelerationRate:UIScrollViewDecelerationRateFast]; - - scrollViewdelegate = [[ASHorizontalScrollViewDelegate alloc] init]; - self.delegate = scrollViewdelegate; + [self initView]; } return self; } +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self initView]; + } + return self; +} + +- (void)initView { + _items = [NSMutableArray array]; + + //default item size is 80% of height + _uniformItemSize = CGSizeMake(self.frame.size.height*0.8, self.frame.size.height*0.8); + + //default attributes + _leftMarginPx = kDefaultLeftMargin; + _miniMarginPxBetweenItems = kMinMarginBetweenItems; + _miniAppearPxOfLastItem = kMinWidthAppearOfLastItem; + + //get default item margin + [self setItemsMarginOnce]; + + [self setShowsHorizontalScrollIndicator:NO]; + [self setDecelerationRate:UIScrollViewDecelerationRateFast]; + + scrollViewdelegate = [[ASHorizontalScrollViewDelegate alloc] init]; + self.delegate = scrollViewdelegate; +} + - (void)setFrame:(CGRect)frame { CGRect oldValue = self.frame; @@ -67,7 +80,12 @@ - (void)setUniformItemSize:(CGSize)uniformItemSize itemY = (self.frame.size.height-uniformItemSize.height)/2; } - +- (BOOL)touchesShouldCancelInContentView:(UIView *)view { + if ([view isKindOfClass:[UIButton class]]) { + return true; + } + return false; +} #pragma mark - add item - (void)addItem:(UIView*)item diff --git a/Sources/ASHorizontalScrollView/ASHorizontalScrollViewDelegate.m b/Sources/ASHorizontalScrollView/ASHorizontalScrollViewDelegate.m index 13b756e..3d7445a 100644 --- a/Sources/ASHorizontalScrollView/ASHorizontalScrollViewDelegate.m +++ b/Sources/ASHorizontalScrollView/ASHorizontalScrollViewDelegate.m @@ -5,7 +5,7 @@ * --------------------------------------------------------- * History * Created by WEIWEI CHEN on 14-6-2. - * + * Edit by WEIWEI CHEN 16-09-15: avoid cloeset index smaller than 0 when only one item showed in screen * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * @@ -29,6 +29,9 @@ - (float)getClosestItemByX:(float)xPosition inScrollView:(ASHorizontalScrollView { //get current cloest item on the left side int index = (int)((xPosition - scrollView.leftMarginPx)/(scrollView.itemsMargin+scrollView.uniformItemSize.width)); + if (index < 0) { + index = 0; + } UIView *item = [scrollView.items objectAtIndex:index]; //check if target position is over half of current left item, if so, move to next item if (xPosition-item.frame.origin.x>item.frame.size.width/2) {