Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit c3ef2ef

Browse files
committed
Merge pull request #1040 from facebook/ASRangeControllerBetaScrollJump
[ASRangeControllerBeta] Support disjoint ranges between updates (scroll jumps, etc)
2 parents 2f7aae1 + bbfd088 commit c3ef2ef

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

AsyncDisplayKit.xcodeproj/project.pbxproj

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
056D21551ABCEF50001107EF /* ASImageNodeSnapshotTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 056D21541ABCEF50001107EF /* ASImageNodeSnapshotTests.m */; };
4141
0574D5E219C110940097DC25 /* ASTableViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 0574D5E119C110610097DC25 /* ASTableViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; };
4242
057D02C41AC0A66700C7AC3C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 057D02C31AC0A66700C7AC3C /* main.m */; };
43-
057D02C71AC0A66700C7AC3C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 057D02C61AC0A66700C7AC3C /* AppDelegate.m */; };
43+
057D02C71AC0A66700C7AC3C /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 057D02C61AC0A66700C7AC3C /* AppDelegate.mm */; };
4444
0587F9BD1A7309ED00AFF0BA /* ASEditableTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0587F9BB1A7309ED00AFF0BA /* ASEditableTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
4545
0587F9BE1A7309ED00AFF0BA /* ASEditableTextNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0587F9BC1A7309ED00AFF0BA /* ASEditableTextNode.mm */; };
4646
058D09B0195D04C000B7D73C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058D09AF195D04C000B7D73C /* Foundation.framework */; };
@@ -539,7 +539,7 @@
539539
057D02C21AC0A66700C7AC3C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
540540
057D02C31AC0A66700C7AC3C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
541541
057D02C51AC0A66700C7AC3C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
542-
057D02C61AC0A66700C7AC3C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
542+
057D02C61AC0A66700C7AC3C /* AppDelegate.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = "<group>"; };
543543
0587F9BB1A7309ED00AFF0BA /* ASEditableTextNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASEditableTextNode.h; sourceTree = "<group>"; };
544544
0587F9BC1A7309ED00AFF0BA /* ASEditableTextNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = ASEditableTextNode.mm; sourceTree = "<group>"; };
545545
058D09AC195D04C000B7D73C /* libAsyncDisplayKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAsyncDisplayKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -833,7 +833,7 @@
833833
children = (
834834
204C979D1B362CB3002B1083 /* Default-568h@2x.png */,
835835
057D02C51AC0A66700C7AC3C /* AppDelegate.h */,
836-
057D02C61AC0A66700C7AC3C /* AppDelegate.m */,
836+
057D02C61AC0A66700C7AC3C /* AppDelegate.mm */,
837837
057D02C11AC0A66700C7AC3C /* Supporting Files */,
838838
);
839839
name = AsyncDisplayKitTestHost;
@@ -1693,7 +1693,7 @@
16931693
isa = PBXSourcesBuildPhase;
16941694
buildActionMask = 2147483647;
16951695
files = (
1696-
057D02C71AC0A66700C7AC3C /* AppDelegate.m in Sources */,
1696+
057D02C71AC0A66700C7AC3C /* AppDelegate.mm in Sources */,
16971697
057D02C41AC0A66700C7AC3C /* main.m in Sources */,
16981698
);
16991699
runOnlyForDeploymentPostprocessing = 0;
@@ -1966,7 +1966,7 @@
19661966
"$(inherited)",
19671967
);
19681968
INFOPLIST_FILE = AsyncDisplayKitTestHost/Info.plist;
1969-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
1969+
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
19701970
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
19711971
MTL_ENABLE_DEBUG_INFO = YES;
19721972
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1983,7 +1983,7 @@
19831983
ENABLE_STRICT_OBJC_MSGSEND = YES;
19841984
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
19851985
INFOPLIST_FILE = AsyncDisplayKitTestHost/Info.plist;
1986-
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
1986+
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
19871987
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
19881988
MTL_ENABLE_DEBUG_INFO = NO;
19891989
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2075,6 +2075,7 @@
20752075
GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch";
20762076
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
20772077
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
2078+
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
20782079
OTHER_CFLAGS = "-Wall";
20792080
OTHER_LDFLAGS = "-ObjC";
20802081
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2095,6 +2096,7 @@
20952096
GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch";
20962097
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
20972098
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
2099+
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
20982100
OTHER_CFLAGS = "-Wall";
20992101
OTHER_LDFLAGS = "-ObjC";
21002102
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2125,6 +2127,7 @@
21252127
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
21262128
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
21272129
INFOPLIST_FILE = "AsyncDisplayKitTests/AsyncDisplayKitTests-Info.plist";
2130+
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
21282131
PRODUCT_NAME = "$(TARGET_NAME)";
21292132
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AsyncDisplayKitTestHost.app/AsyncDisplayKitTestHost";
21302133
WRAPPER_EXTENSION = xctest;
@@ -2152,6 +2155,7 @@
21522155
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
21532156
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
21542157
INFOPLIST_FILE = "AsyncDisplayKitTests/AsyncDisplayKitTests-Info.plist";
2158+
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
21552159
PRODUCT_NAME = "$(TARGET_NAME)";
21562160
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AsyncDisplayKitTestHost.app/AsyncDisplayKitTestHost";
21572161
WRAPPER_EXTENSION = xctest;

AsyncDisplayKit/Details/ASRangeControllerBeta.mm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ @interface ASRangeControllerBeta ()
3737
BOOL _rangeIsValid;
3838
BOOL _queuedRangeUpdate;
3939
ASScrollDirection _scrollDirection;
40+
NSSet *_allPreviousIndexPaths;
4041
}
4142

4243
@end
@@ -112,6 +113,13 @@ - (void)_updateVisibleNodeIndexPaths
112113
[allIndexPaths unionSet:displayIndexPaths];
113114
[allIndexPaths unionSet:visibleIndexPaths];
114115

116+
// Sets are magical. Add anything we had applied interfaceState to in the last update, so we can clear any
117+
// range flags it still has enabled. Most of the time, all but a few elements are equal; a large programmatic
118+
// scroll or major main thread stall could cause entirely disjoint sets, but we must visit all.
119+
NSSet *allCurrentIndexPaths = [allIndexPaths copy];
120+
[allIndexPaths unionSet:_allPreviousIndexPaths];
121+
_allPreviousIndexPaths = allCurrentIndexPaths;
122+
115123
for (NSIndexPath *indexPath in allIndexPaths) {
116124
// Before a node / indexPath is exposed to ASRangeController, ASDataController should have already measured it.
117125
// For consistency, make sure each node knows that it should measure itself if something changes.
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
*/
88

99
#import "AppDelegate.h"
10+
#import <AsyncDisplayKit/ASDisplayNode.h>
11+
#import <AsyncDisplayKit/ASDisplayNode+Beta.h>
1012

1113
@implementation AppDelegate
1214

13-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
15+
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
16+
{
17+
[ASDisplayNode setShouldUseNewRenderingRange:YES];
1418
return YES;
1519
}
1620

0 commit comments

Comments
 (0)