Skip to content

Commit 8fffd6b

Browse files
committed
Add constraint offset
1 parent c33d0e2 commit 8fffd6b

5 files changed

+74
-3
lines changed

JazzHands.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'JazzHands'
3-
s.version = '2.0.3'
3+
s.version = '2.0.4'
44
s.summary = 'Simple keyframe animations for scrolling intros.'
55
s.homepage = 'https://github.com/IFTTT/JazzHands'
66
s.author = {

JazzHands/IFTTTAnimatedPagingScrollViewController.h

+4
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,9 @@
3232
- (void)keepView:(UIView *)view onPage:(CGFloat)page withAttribute:(IFTTTHorizontalPositionAttribute)attribute;
3333
- (void)keepView:(UIView *)view onPages:(NSArray *)pages withAttribute:(IFTTTHorizontalPositionAttribute)attribute;
3434
- (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)times withAttribute:(IFTTTHorizontalPositionAttribute)attribute;
35+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages withAttribute:(IFTTTHorizontalPositionAttribute)attribute offset:(CGFloat)offset;
36+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)times withAttribute:(IFTTTHorizontalPositionAttribute)attribute offset:(CGFloat)offset;
37+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages withOffsets:(NSArray *)offsets withAttribute:(IFTTTHorizontalPositionAttribute)attribute;
38+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)times withOffsets:(NSArray *)offsets withAttribute:(IFTTTHorizontalPositionAttribute)attribute;
3539

3640
@end

JazzHands/IFTTTAnimatedPagingScrollViewController.m

+46-1
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,16 @@ - (void)keepView:(UIView *)view onPages:(NSArray *)pages withAttribute:(IFTTTHor
206206
}
207207

208208
- (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)times withAttribute:(IFTTTHorizontalPositionAttribute)attribute
209+
{
210+
[self keepView:view onPages:pages atTimes:times withAttribute:attribute offset:0.f];
211+
}
212+
213+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages withAttribute:(IFTTTHorizontalPositionAttribute)attribute offset:(CGFloat)offset
214+
{
215+
[self keepView:view onPages:pages atTimes:pages withAttribute:attribute offset:offset];
216+
}
217+
218+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)times withAttribute:(IFTTTHorizontalPositionAttribute)attribute offset:(CGFloat)offset
209219
{
210220
NSAssert((pages.count == times.count), @"Make sure you set a time for each position.");
211221

@@ -217,7 +227,7 @@ - (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)time
217227
toItem:self.contentView
218228
attribute:NSLayoutAttributeLeft
219229
multiplier:1.f
220-
constant:0.f];
230+
constant:offset];
221231
[self.contentView addConstraint:xPositionConstraint];
222232
// TODO: set constraint type for animation initializer
223233
IFTTTScrollViewPageConstraintAnimation *xPositionAnimation = [IFTTTScrollViewPageConstraintAnimation animationWithSuperview:self.contentView
@@ -234,6 +244,41 @@ - (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)time
234244
[self.scrollViewPageConstraintAnimations addObject:xPositionAnimation];
235245
}
236246

247+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages withOffsets:(NSArray *)offsets withAttribute:(IFTTTHorizontalPositionAttribute)attribute
248+
{
249+
[self keepView:view onPages:pages atTimes:pages withOffsets:offsets withAttribute:attribute];
250+
}
251+
252+
- (void)keepView:(UIView *)view onPages:(NSArray *)pages atTimes:(NSArray *)times withOffsets:(NSArray *)offsets withAttribute:(IFTTTHorizontalPositionAttribute)attribute
253+
{
254+
NSAssert((pages.count == times.count) && (pages.count == offsets.count), @"Make sure you set a time and offset for each position.");
255+
256+
view.translatesAutoresizingMaskIntoConstraints = NO;
257+
258+
NSLayoutConstraint *xPositionConstraint = [NSLayoutConstraint constraintWithItem:view
259+
attribute:[self layoutAttributeFromPositionAttribute:attribute]
260+
relatedBy:NSLayoutRelationEqual
261+
toItem:self.contentView
262+
attribute:NSLayoutAttributeLeft
263+
multiplier:1.f
264+
constant:0.f];
265+
[self.contentView addConstraint:xPositionConstraint];
266+
// TODO: set constraint type for animation initializer
267+
IFTTTScrollViewPageConstraintAnimation *xPositionAnimation = [IFTTTScrollViewPageConstraintAnimation animationWithSuperview:self.contentView
268+
constraint:xPositionConstraint
269+
pageWidth:self.pageWidth
270+
attribute:attribute];
271+
272+
for (NSUInteger i = 0; i < pages.count; i++) {
273+
[xPositionAnimation addKeyframeForTime:(CGFloat)[(NSNumber *)times[i] floatValue]
274+
page:(CGFloat)[(NSNumber *)pages[i] floatValue]
275+
constant:(CGFloat)[(NSNumber *)offsets[i] floatValue]];
276+
}
277+
278+
[self.animator addAnimation:xPositionAnimation];
279+
[self.scrollViewPageConstraintAnimations addObject:xPositionAnimation];
280+
}
281+
237282
- (CGFloat)centerXMultiplierForPage:(CGFloat)page
238283
{
239284
return [self multiplierForPage:page withAttribute:IFTTTHorizontalPositionAttributeCenterX];

JazzHands/IFTTTScrollViewPageConstraintAnimation.h

+2
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ typedef NS_ENUM(NSUInteger, IFTTTHorizontalPositionAttribute) {
2222
+ (instancetype)animationWithSuperview:(UIView *)superview constraint:(NSLayoutConstraint *)constraint pageWidth:(CGFloat)pageWidth attribute:(IFTTTHorizontalPositionAttribute)attribute;
2323
- (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page;
2424
- (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page withEasingFunction:(IFTTTEasingFunction)easingFunction;
25+
- (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page constant:(CGFloat)constant;
26+
- (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page constant:(CGFloat)constant withEasingFunction:(IFTTTEasingFunction)easingFunction;
2527

2628
@end

JazzHands/IFTTTScrollViewPageConstraintAnimation.m

+21-1
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
//
88

99
#import "IFTTTScrollViewPageConstraintAnimation.h"
10+
#import "IFTTTFilmstrip.h"
1011

1112
@interface IFTTTScrollViewPageConstraintAnimation ()
1213

1314
@property (nonatomic, strong) UIView *superview;
1415
@property (nonatomic, strong) NSLayoutConstraint *constraint;
1516
@property (nonatomic, assign) CGFloat initialConstraintConstant;
1617
@property (nonatomic, assign) IFTTTHorizontalPositionAttribute attribute;
18+
@property (nonatomic, strong) IFTTTFilmstrip *constantFilmstrip;
1719

1820
@end
1921

@@ -27,6 +29,7 @@ - (instancetype)initWithSuperview:(UIView *)superview constraint:(NSLayoutConstr
2729
_initialConstraintConstant = constraint.constant;
2830
_pageWidth = pageWidth;
2931
_attribute = attribute;
32+
_constantFilmstrip = [IFTTTFilmstrip new];
3033
}
3134
return self;
3235
}
@@ -46,6 +49,18 @@ - (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page withEasingFunction:(
4649
[self addKeyframeForTime:time value:@(page) withEasingFunction:easingFunction];
4750
}
4851

52+
- (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page constant:(CGFloat)constant
53+
{
54+
[self addKeyframeForTime:time value:@(page)];
55+
[self.constantFilmstrip setValue:@(constant) atTime:time];
56+
}
57+
58+
- (void)addKeyframeForTime:(CGFloat)time page:(CGFloat)page constant:(CGFloat)constant withEasingFunction:(IFTTTEasingFunction)easingFunction
59+
{
60+
[self addKeyframeForTime:time value:@(page) withEasingFunction:easingFunction];
61+
[self.constantFilmstrip setValue:@(constant) atTime:time withEasingFunction:easingFunction];
62+
}
63+
4964
- (void)animate:(CGFloat)time
5065
{
5166
if (!self.hasKeyframes) return;
@@ -64,7 +79,12 @@ - (void)animate:(CGFloat)time
6479
break;
6580
}
6681

67-
self.constraint.constant = (offset + page) * self.pageWidth + self.initialConstraintConstant;
82+
CGFloat constant = 0.f;
83+
if (!self.constantFilmstrip.isEmpty) {
84+
constant = (CGFloat)[(NSNumber *)[self.constantFilmstrip valueAtTime:time] floatValue];
85+
}
86+
87+
self.constraint.constant = (offset + page) * self.pageWidth + self.initialConstraintConstant + constant;
6888
[self.superview layoutIfNeeded];
6989
}
7090

0 commit comments

Comments
 (0)