iOS: implement NestedSlider slidePosition

This commit is contained in:
pengfei.zhou
2023-04-04 20:28:31 +08:00
committed by osborn
parent 18d5050c7a
commit 91d5d016f9
13 changed files with 64 additions and 12 deletions

View File

@@ -61,6 +61,15 @@ - (void)blendView:(UIScrollView *)view forPropName:(NSString *)name propValue:(i
self.view.scrollsToTop = [prop boolValue];
} else if ([@"onPageSlided" isEqualToString:name]) {
self.onPageSelectedFuncId = prop;
} else if ([@"slidePosition" isEqualToString:name]) {
NSUInteger slidePosition = [prop unsignedIntegerValue];
if (self.view.width > 0 && ((NSUInteger) self.view.contentOffset.x / self.view.width) == slidePosition) {
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[self.view setContentOffset:CGPointMake(slidePosition * self.view.width, self.view.contentOffset.y)
animated:NO];
});
}
} else {
[super blendView:view forPropName:name propValue:prop];
}

View File

@@ -208,15 +208,23 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection
DoricSlideItemNode *node = cell.doricSlideItemNode;
node.viewId = model[@"id"];
[node blend:props];
[node.view.doricLayout apply:CGSizeMake(collectionView.width, collectionView.height)];
CGFloat maxWidth = collectionView.width;
if (collectionView.doricLayout.widthSpec == DoricLayoutFit) {
maxWidth = [[UIScreen mainScreen] bounds].size.width;
}
CGFloat maxHeight = collectionView.height;
if (collectionView.doricLayout.heightSpec == DoricLayoutFit) {
maxHeight = [[UIScreen mainScreen] bounds].size.height;
}
[node.view.doricLayout apply:CGSizeMake(maxWidth, maxHeight)];
[node requestLayout];
BOOL needLayout = NO;
if (self.view.doricLayout.widthSpec == DoricLayoutFit && self.view.width < node.view.width) {
if (collectionView.doricLayout.widthSpec == DoricLayoutFit && collectionView.width < node.view.width) {
self.view.width = node.view.width;
needLayout = YES;
}
if (self.view.doricLayout.heightSpec == DoricLayoutFit && self.view.height < node.view.height) {
self.view.height = node.view.height;
if (collectionView.doricLayout.heightSpec == DoricLayoutFit && collectionView.height < node.view.height) {
collectionView.height = node.view.height;
needLayout = YES;
}
if (needLayout) {
@@ -238,6 +246,11 @@ - (void)scheduleLayout {
self.scheduledLayout = NO;
DoricSuperNode *node = self.superNode;
while (node.superNode != nil) {
if ([node.view isKindOfClass:UITableView.class]) {
UITableView *tableView = (UITableView *) node.view;
[tableView reloadData];
return;
}
node = node.superNode;
}
[node requestLayout];