-
Notifications
You must be signed in to change notification settings - Fork 9
/
Tweak.mm
117 lines (90 loc) · 3.02 KB
/
Tweak.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#import <UIKit/UIKit.h>
@interface SBAppSliderController : UIViewController
- (NSArray *)applicationList;
- (void)_quitAppAtIndex:(unsigned int)arg1;
- (UIScrollView *)pageForDisplayIdentifier:(id)arg1;
- (void)forceDismissAnimated:(BOOL)arg1;
@end
@interface SBAppSliderScrollingViewController : UIViewController
- (void)animateView:(UIView *)view withTransform:(CATransform3D)transform duration:(float)duration;
@end
%hook SBAppSliderController
- (BOOL)sliderScroller:(id)arg1 isIndexRemovable:(unsigned int)arg2 {
return YES;
}
- (void)_quitAppAtIndex:(unsigned int)arg1 {
if (arg1 == 0) {
if ([[self applicationList] count] == 1)
system("killall backboardd");
else {
for (NSString *appID in [self applicationList]) {
if (![appID isEqualToString:@"com.apple.springboard"])
[self _quitAppAtIndex:[[self applicationList] indexOfObject:appID]];
}
UIScrollView *SpringBoardPage = (UIScrollView *)[[self pageForDisplayIdentifier:@"com.apple.springboard"] superview];
[SpringBoardPage setContentOffset:CGPointMake(0, -self.view.frame.size.height) animated:NO];
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
[SpringBoardPage setContentOffset:CGPointMake(0, 0.f) animated:NO];
}
completion:^(BOOL finished){
[self forceDismissAnimated:YES];
}
];
}
}
else
%orig;
}
%end
%hook SBAppSliderScrollingViewController
- (void)scrollViewDidScroll:(UIScrollView *)arg1 {
if ([arg1.superview.subviews objectAtIndex:0] == arg1) {
for (unsigned int i = 0; i < [arg1.superview.subviews count]; i++) {
UIScrollView *view = [arg1.superview.subviews objectAtIndex:i];
if (i != 0 && arg1 != view) {
[view setContentOffset:arg1.contentOffset animated:NO];
}
}
}
%orig;
}
- (void)scrollViewWillBeginDragging:(UIView *)arg1 {
CATransform3D transform = CATransform3DIdentity;
transform.m24 = -1/2000.f;
transform.m34 = 1/500.f;
transform = CATransform3DRotate(transform, -M_PI * 0.1f, 1, 0, 0);
if (arg1 != [arg1.superview.subviews objectAtIndex:0])
[self animateView:arg1 withTransform:transform duration:0.2];
else {
for (UIView *view in arg1.superview.subviews) {
[self animateView:view withTransform:transform duration:0.2];
}
}
%orig;
}
- (void)scrollViewWillEndDragging:(UIView *)arg1 withVelocity:(CGPoint)arg2 targetContentOffset:(CGPoint)arg3 {
CATransform3D transform = CATransform3DIdentity;
if (arg1 != [arg1.superview.subviews objectAtIndex:0])
[self animateView:arg1 withTransform:transform duration:0.2];
else {
for (UIView *view in arg1.superview.subviews) {
[self animateView:view withTransform:transform duration:0.2];
}
}
%orig;
}
%new
- (void)animateView:(UIView *)view withTransform:(CATransform3D)transform duration:(float)duration {
[UIView animateWithDuration:duration
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
view.layer.transform = transform;
}
completion:nil
];
}
%end