Skip to content
This repository has been archived by the owner on Jul 12, 2019. It is now read-only.

Add individual trigger limit properties #109

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions MCSwipeTableViewCell/MCSwipeTableViewCell.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,18 @@ typedef void (^MCSwipeCompletionBlock)(MCSwipeTableViewCell *cell, MCSwipeTableV
/** Percentage value to trigger the 2nd state of a swipe gesture. */
@property (nonatomic, assign, readwrite) CGFloat secondTrigger;

/** Percentage value to trigger the 1st state of a right swipe gesture. */
@property (nonatomic, assign, readwrite) CGFloat rightFirstTrigger;

/** Percentage value to trigger the 2nd state of a right swipe gesture. */
@property (nonatomic, assign, readwrite) CGFloat rightSecondTrigger;

/** Percentage value to trigger the 1st state of a left swipe gesture. */
@property (nonatomic, assign, readwrite) CGFloat leftFirstTrigger;

/** Percentage value to trigger the 2nd state of a left swipe gesture. */
@property (nonatomic, assign, readwrite) CGFloat leftSecondTrigger;


/** 1st `MCSwipeTableViewCellMode` of the state triggered during a Left -> Right swipe. */
@property (nonatomic, assign, readwrite) MCSwipeTableViewCellMode modeForState1;
Expand Down
78 changes: 52 additions & 26 deletions MCSwipeTableViewCell/MCSwipeTableViewCell.m
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,10 @@ - (void)initDefaults {
_shouldDrag = YES;
_shouldAnimateIcons = YES;

_firstTrigger = kMCStop1;
_secondTrigger = kMCStop2;
_rightFirstTrigger = kMCStop1;
_rightSecondTrigger = kMCStop2;
_leftFirstTrigger = kMCStop1;
_leftSecondTrigger = kMCStop2;

_damping = kMCDamping;
_velocity = kMCVelocity;
Expand Down Expand Up @@ -212,6 +214,30 @@ - (void)setViewOfSlidingView:(UIView *)slidingView {

#pragma mark - Swipe configuration

- (CGFloat)firstTrigger {
if (_rightFirstTrigger != _leftFirstTrigger)
return CGFLOAT_MAX;

return _rightFirstTrigger;
}

- (void)setFirstTrigger:(CGFloat)trigger {
_rightFirstTrigger = trigger;
_leftFirstTrigger = trigger;
}

- (CGFloat)secondTrigger {
if (_rightSecondTrigger != _leftSecondTrigger)
return CGFLOAT_MAX;

return _rightSecondTrigger;
}

- (void)setSecondTrigger:(CGFloat)trigger {
_rightSecondTrigger = trigger;
_leftSecondTrigger = trigger;
}

- (void)setSwipeGestureWithView:(UIView *)view
color:(UIColor *)color
mode:(MCSwipeTableViewCellMode)mode
Expand Down Expand Up @@ -407,15 +433,15 @@ - (UIView *)viewWithPercentage:(CGFloat)percentage {
view = _view1;
}

if (percentage >= _secondTrigger && _modeForState2) {
if (percentage >= _rightSecondTrigger && _modeForState2) {
view = _view2;
}

if (percentage < 0 && _modeForState3) {
view = _view3;
}

if (percentage <= -_secondTrigger && _modeForState4) {
if (percentage <= -_leftSecondTrigger && _modeForState4) {
view = _view4;
}

Expand All @@ -425,12 +451,12 @@ - (UIView *)viewWithPercentage:(CGFloat)percentage {
- (CGFloat)alphaWithPercentage:(CGFloat)percentage {
CGFloat alpha;

if (percentage >= 0 && percentage < _firstTrigger) {
alpha = percentage / _firstTrigger;
if (percentage >= 0 && percentage < _rightFirstTrigger) {
alpha = percentage / _rightFirstTrigger;
}

else if (percentage < 0 && percentage > -_firstTrigger) {
alpha = fabs(percentage / _firstTrigger);
else if (percentage < 0 && percentage > -_leftFirstTrigger) {
alpha = fabs(percentage / _leftFirstTrigger);
}

else {
Expand All @@ -447,19 +473,19 @@ - (UIColor *)colorWithPercentage:(CGFloat)percentage {

color = self.defaultColor ? self.defaultColor : [UIColor clearColor];

if (percentage > _firstTrigger && _modeForState1) {
if (percentage > _rightFirstTrigger && _modeForState1) {
color = _color1;
}

if (percentage > _secondTrigger && _modeForState2) {
if (percentage > _rightSecondTrigger && _modeForState2) {
color = _color2;
}

if (percentage < -_firstTrigger && _modeForState3) {
if (percentage < -_leftFirstTrigger && _modeForState3) {
color = _color3;
}

if (percentage <= -_secondTrigger && _modeForState4) {
if (percentage <= -_leftSecondTrigger && _modeForState4) {
color = _color4;
}

Expand All @@ -471,19 +497,19 @@ - (MCSwipeTableViewCellState)stateWithPercentage:(CGFloat)percentage {

state = MCSwipeTableViewCellStateNone;

if (percentage >= _firstTrigger && _modeForState1) {
if (percentage >= _rightFirstTrigger && _modeForState1) {
state = MCSwipeTableViewCellState1;
}

if (percentage >= _secondTrigger && _modeForState2) {
if (percentage >= _rightSecondTrigger && _modeForState2) {
state = MCSwipeTableViewCellState2;
}

if (percentage <= -_firstTrigger && _modeForState3) {
if (percentage <= -_leftFirstTrigger && _modeForState3) {
state = MCSwipeTableViewCellState3;
}

if (percentage <= -_secondTrigger && _modeForState4) {
if (percentage <= -_leftSecondTrigger && _modeForState4) {
state = MCSwipeTableViewCellState4;
}

Expand Down Expand Up @@ -520,30 +546,30 @@ - (void)slideViewWithPercentage:(CGFloat)percentage view:(UIView *)view isDraggi
position.y = CGRectGetHeight(self.bounds) / 2.0;

if (isDragging) {
if (percentage >= 0 && percentage < _firstTrigger) {
position.x = [self offsetWithPercentage:(_firstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
if (percentage >= 0 && percentage < _rightFirstTrigger) {
position.x = [self offsetWithPercentage:(_rightFirstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
}

else if (percentage >= _firstTrigger) {
position.x = [self offsetWithPercentage:percentage - (_firstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
else if (percentage >= _rightFirstTrigger) {
position.x = [self offsetWithPercentage:percentage - (_rightFirstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
}

else if (percentage < 0 && percentage >= -_firstTrigger) {
position.x = CGRectGetWidth(self.bounds) - [self offsetWithPercentage:(_firstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
else if (percentage < 0 && percentage >= -_leftFirstTrigger) {
position.x = CGRectGetWidth(self.bounds) - [self offsetWithPercentage:(_leftFirstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
}

else if (percentage < -_firstTrigger) {
position.x = CGRectGetWidth(self.bounds) + [self offsetWithPercentage:percentage + (_firstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
else if (percentage < -_leftFirstTrigger) {
position.x = CGRectGetWidth(self.bounds) + [self offsetWithPercentage:percentage + (_leftFirstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
}
}

else {
if (_direction == MCSwipeTableViewCellDirectionRight) {
position.x = [self offsetWithPercentage:(_firstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
position.x = [self offsetWithPercentage:(_rightFirstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
}

else if (_direction == MCSwipeTableViewCellDirectionLeft) {
position.x = CGRectGetWidth(self.bounds) - [self offsetWithPercentage:(_firstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
position.x = CGRectGetWidth(self.bounds) - [self offsetWithPercentage:(_leftFirstTrigger / 2) relativeToWidth:CGRectGetWidth(self.bounds)];
}

else {
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,15 @@ cell.firstTrigger = 0.1;
cell.secondTrigger = 0.5;
```

You can also change individual trigger limits as follows:

``` objc
cell.rightFirstTrigger = 0.1;
cell.rightSecondTrigger = 0.5;
cell.leftFirstTrigger = 0.35;
cell.leftSecondTrigger = 0.6;
```

### Reseting cell position
It is possible to put the cell back to it's position when using the `MCSwipeTableViewCellModeExit` mode with the `-swipeToOriginWithCompletion:` method:

Expand Down