mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Various improvements
This commit is contained in:
parent
bf3ec930bc
commit
3684c6ca15
34 changed files with 593 additions and 339 deletions
|
|
@ -4,6 +4,7 @@
|
|||
double animationDurationFactorImpl();
|
||||
|
||||
CABasicAnimation * _Nonnull makeSpringAnimationImpl(NSString * _Nonnull keyPath);
|
||||
CABasicAnimation * _Nonnull make26SpringAnimationImpl(NSString * _Nonnull keyPath, double duration);
|
||||
CABasicAnimation * _Nonnull makeSpringBounceAnimationImpl(NSString * _Nonnull keyPath, CGFloat initialVelocity, CGFloat damping);
|
||||
CGFloat springAnimationValueAtImpl(CABasicAnimation * _Nonnull animation, CGFloat t);
|
||||
|
||||
|
|
@ -36,3 +37,5 @@ void setLayerDisableScreenshots(CALayer * _Nonnull layer, bool disableScreenshot
|
|||
bool getLayerDisableScreenshots(CALayer * _Nonnull layer);
|
||||
|
||||
void setLayerContentsMaskMode(CALayer * _Nonnull layer, bool maskMode);
|
||||
|
||||
void setMonochromaticEffectImpl(UIView * _Nonnull view, bool isEnabled);
|
||||
|
|
|
|||
|
|
@ -61,6 +61,24 @@ CABasicAnimation * _Nonnull makeSpringAnimationImpl(NSString * _Nonnull keyPath)
|
|||
return springAnimation;
|
||||
}
|
||||
|
||||
CABasicAnimation * _Nonnull make26SpringAnimationImpl(NSString * _Nonnull keyPath, double duration) {
|
||||
CASpringAnimation *springAnimation = [CASpringAnimation animationWithKeyPath:keyPath];
|
||||
springAnimation.mass = 1.0f;
|
||||
springAnimation.stiffness = 555.027;
|
||||
springAnimation.damping = 47.118;
|
||||
springAnimation.duration = duration;
|
||||
springAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
|
||||
if (@available(iOS 17.0, *)) {
|
||||
springAnimation.allowsOverdamping = false;
|
||||
}
|
||||
if (@available(iOS 15.0, *)) {
|
||||
[springAnimation setValue:@(1048619) forKey:@"highFrameRateReason"];
|
||||
springAnimation.preferredFrameRateRange = CAFrameRateRangeMake(80.0, 120.0, 120.0);
|
||||
}
|
||||
|
||||
return springAnimation;
|
||||
}
|
||||
|
||||
CABasicAnimation * _Nonnull makeSpringBounceAnimationImpl(NSString * _Nonnull keyPath, CGFloat initialVelocity, CGFloat damping) {
|
||||
CASpringAnimation *springAnimation = [CASpringAnimation animationWithKeyPath:keyPath];
|
||||
springAnimation.mass = 5.0f;
|
||||
|
|
@ -134,6 +152,20 @@ static void setBoolField(NSObject *object, NSString *name, BOOL value) {
|
|||
[inv invoke];
|
||||
}
|
||||
|
||||
static void setLongLongField(NSObject *object, NSString *name, long long value) {
|
||||
SEL selector = NSSelectorFromString(name);
|
||||
NSMethodSignature *signature = [[object class] instanceMethodSignatureForSelector:selector];
|
||||
if (signature == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:signature];
|
||||
[inv setSelector:selector];
|
||||
[inv setArgument:&value atIndex:2];
|
||||
[inv setTarget:object];
|
||||
[inv invoke];
|
||||
}
|
||||
|
||||
UIBlurEffect *makeCustomZoomBlurEffectImpl(bool isLight) {
|
||||
if (@available(iOS 13.0, *)) {
|
||||
if (isLight) {
|
||||
|
|
@ -299,3 +331,27 @@ void setLayerContentsMaskMode(CALayer * _Nonnull layer, bool maskMode) {
|
|||
[layer setValue:@"RGBA" forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
void setMonochromaticEffectImpl(UIView * _Nonnull view, bool isEnabled) {
|
||||
if (@available(iOS 26.0, *)) {
|
||||
static NSString *key1 = nil;
|
||||
static NSString *key2 = nil;
|
||||
static NSString *key3 = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
key1 = [[@"_" stringByAppendingString:@"setAllows"] stringByAppendingString:@"MonochromaticTreatment:"];
|
||||
key2 = [[@"_" stringByAppendingString:@"setEnable"] stringByAppendingString:@"MonochromaticTreatment:"];
|
||||
key3 = [[@"_" stringByAppendingString:@"set"] stringByAppendingString:@"MonochromaticTreatment:"];
|
||||
});
|
||||
|
||||
if (isEnabled) {
|
||||
setBoolField(view, key1, true);
|
||||
setBoolField(view, key2, true);
|
||||
setLongLongField(view, key3, 2);
|
||||
} else {
|
||||
setBoolField(view, key1, false);
|
||||
setBoolField(view, key2, false);
|
||||
setLongLongField(view, key3, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue