mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
setNeedsDisplay must be called on main
This commit is contained in:
@@ -64,6 +64,22 @@ void ASDisplayNodePerformBlockOnMainThread(void (^block)())
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ASDisplayNodeRespectThreadAffinityOfNode(ASDisplayNode *node, void (^block)())
|
||||||
|
{
|
||||||
|
ASDisplayNodeCAssertNotNil(block, @"block is required");
|
||||||
|
if (!block) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.nodeLoaded) {
|
||||||
|
ASDisplayNodePerformBlockOnMainThread(^{
|
||||||
|
block();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
block();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+ (void)initialize
|
+ (void)initialize
|
||||||
{
|
{
|
||||||
if (self == [ASDisplayNode class]) {
|
if (self == [ASDisplayNode class]) {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#import <AsyncDisplayKit/_ASDisplayLayer.h>
|
#import <AsyncDisplayKit/_ASDisplayLayer.h>
|
||||||
#import <AsyncDisplayKit/ASAssert.h>
|
#import <AsyncDisplayKit/ASAssert.h>
|
||||||
#import <AsyncDisplayKit/ASDisplayNode+Subclasses.h>
|
#import <AsyncDisplayKit/ASDisplayNode+Subclasses.h>
|
||||||
|
#import <AsyncDisplayKit/ASDisplayNodeInternal.h>
|
||||||
#import <AsyncDisplayKit/ASHighlightOverlayLayer.h>
|
#import <AsyncDisplayKit/ASHighlightOverlayLayer.h>
|
||||||
#import <AsyncDisplayKit/ASTextNodeCoreTextAdditions.h>
|
#import <AsyncDisplayKit/ASTextNodeCoreTextAdditions.h>
|
||||||
#import <AsyncDisplayKit/ASTextNodeTextKitHelpers.h>
|
#import <AsyncDisplayKit/ASTextNodeTextKitHelpers.h>
|
||||||
@@ -202,7 +203,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
|
|
||||||
_constrainedSize = constrainedSizeForText;
|
_constrainedSize = constrainedSizeForText;
|
||||||
[self _invalidateRenderer];
|
[self _invalidateRenderer];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
CGSize rendererSize = [[self _renderer] size];
|
CGSize rendererSize = [[self _renderer] size];
|
||||||
|
|
||||||
// Add shadow padding back
|
// Add shadow padding back
|
||||||
@@ -337,6 +340,7 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
// We need an entirely new renderer
|
// We need an entirely new renderer
|
||||||
[self _invalidateRenderer];
|
[self _invalidateRenderer];
|
||||||
|
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
// Tell the display node superclasses that the cached layout is incorrect now
|
// Tell the display node superclasses that the cached layout is incorrect now
|
||||||
[self invalidateCalculatedLayout];
|
[self invalidateCalculatedLayout];
|
||||||
|
|
||||||
@@ -350,6 +354,7 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
} else {
|
} else {
|
||||||
self.isAccessibilityElement = YES;
|
self.isAccessibilityElement = YES;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Text Layout
|
#pragma mark - Text Layout
|
||||||
@@ -360,7 +365,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
_exclusionPaths = exclusionPaths;
|
_exclusionPaths = exclusionPaths;
|
||||||
[self _invalidateRenderer];
|
[self _invalidateRenderer];
|
||||||
[self invalidateCalculatedLayout];
|
[self invalidateCalculatedLayout];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -897,7 +904,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
}
|
}
|
||||||
_shadowColor = shadowColor;
|
_shadowColor = shadowColor;
|
||||||
[self _invalidateShadower];
|
[self _invalidateShadower];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -911,7 +920,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
if (!CGSizeEqualToSize(_shadowOffset, shadowOffset)) {
|
if (!CGSizeEqualToSize(_shadowOffset, shadowOffset)) {
|
||||||
_shadowOffset = shadowOffset;
|
_shadowOffset = shadowOffset;
|
||||||
[self _invalidateShadower];
|
[self _invalidateShadower];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -925,7 +936,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
if (_shadowOpacity != shadowOpacity) {
|
if (_shadowOpacity != shadowOpacity) {
|
||||||
_shadowOpacity = shadowOpacity;
|
_shadowOpacity = shadowOpacity;
|
||||||
[self _invalidateShadower];
|
[self _invalidateShadower];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -939,7 +952,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
if (_shadowRadius != shadowRadius) {
|
if (_shadowRadius != shadowRadius) {
|
||||||
_shadowRadius = shadowRadius;
|
_shadowRadius = shadowRadius;
|
||||||
[self _invalidateShadower];
|
[self _invalidateShadower];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,7 +996,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
if (_truncationMode != truncationMode) {
|
if (_truncationMode != truncationMode) {
|
||||||
_truncationMode = truncationMode;
|
_truncationMode = truncationMode;
|
||||||
[self _invalidateRenderer];
|
[self _invalidateRenderer];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -995,7 +1012,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
if (_maximumLineCount != maximumLineCount) {
|
if (_maximumLineCount != maximumLineCount) {
|
||||||
_maximumLineCount = maximumLineCount;
|
_maximumLineCount = maximumLineCount;
|
||||||
[self _invalidateRenderer];
|
[self _invalidateRenderer];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1010,7 +1029,9 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f)
|
|||||||
{
|
{
|
||||||
_composedTruncationString = [self _prepareTruncationStringForDrawing:[self _composedTruncationString]];
|
_composedTruncationString = [self _prepareTruncationStringForDrawing:[self _composedTruncationString]];
|
||||||
[self _invalidateRenderer];
|
[self _invalidateRenderer];
|
||||||
|
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
BOOL ASDisplayNodeSubclassOverridesSelector(Class subclass, SEL selector);
|
BOOL ASDisplayNodeSubclassOverridesSelector(Class subclass, SEL selector);
|
||||||
void ASDisplayNodePerformBlockOnMainThread(void (^block)());
|
void ASDisplayNodePerformBlockOnMainThread(void (^block)());
|
||||||
|
void ASDisplayNodeRespectThreadAffinityOfNode(ASDisplayNode *node, void (^block)());
|
||||||
|
|
||||||
typedef NS_OPTIONS(NSUInteger, ASDisplayNodeMethodOverrides) {
|
typedef NS_OPTIONS(NSUInteger, ASDisplayNodeMethodOverrides) {
|
||||||
ASDisplayNodeMethodOverrideNone = 0,
|
ASDisplayNodeMethodOverrideNone = 0,
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ SPEC CHECKSUMS:
|
|||||||
FBSnapshotTestCase: 3dc3899168747a0319c5278f5b3445c13a6532dd
|
FBSnapshotTestCase: 3dc3899168747a0319c5278f5b3445c13a6532dd
|
||||||
OCMock: a6a7dc0e3997fb9f35d99f72528698ebf60d64f2
|
OCMock: a6a7dc0e3997fb9f35d99f72528698ebf60d64f2
|
||||||
|
|
||||||
COCOAPODS: 0.37.2
|
COCOAPODS: 0.38.2
|
||||||
|
|||||||
Reference in New Issue
Block a user