Objective C在两个类之间传递CGFloat值

时间:2017-09-21 18:19:03

标签: objective-c xcode uicollectionview cgfloat

我有一个小问题..

为方便起见,让您更好地了解如何共享集合视图:

Collectionview 1具有自定义段控制功能(它具有自定义UICollectionView自定义类)

Collectionview 2包含充当页面的单元格(它有一个UICollectionViewController类)。

  1. 我有一个UIViewController,它包含我用来创建自定义段控件的collectionview1(如菜单)

  2. 指示选择了哪个单元格的光标是在collectionView 1类中使用uiview创建的。

  3. 在我的主视图控制器中,除了具有集合视图外,我还插入了一个容器视图,其中包含一个集合视图控制器,用于通过水平滚动显示所选页面。

  4. 当我想将 ContentOffset值传递到collectionView2 scrollViewDidScroll到collectionView 1 中的光标时,我的问题就出现了。

    我尝试初始化collectionView 2类中的collectionview 1类以直接使用游标,但我没有得到任何结果。

    你能帮我理解如何解决这个问题吗?

    这是Class CollectionView 1(菜单)

    -(instancetype)initWithCoder:(NSCoder *)aDecoder {
        self = [super initWithCoder:aDecoder];
        if (self) {
            [self setupControl];
        }
        return self;
    }
    
    -(void)setupControl {
        self.delegate = self;
        self.dataSource = self;
        self.pagingEnabled = YES;
        self.showsHorizontalScrollIndicator = NO;
        UINib *nib = [UINib nibWithNibName:@"UDSectionNavCell" bundle: nil];
        [self registerNib:nib forCellWithReuseIdentifier:@"SCC"];
        [self layout];
    
        _horizontalCursorBar = [[UDSectionNavCursor alloc] init];
        _horizontalCursorBar.frame = CGRectMake(0, self.frame.size.height - 6, self.frame.size.width / 4, 3);
        _horizontalCursorBar.layer.cornerRadius = 3;
        _horizontalCursorBar.backgroundColor = [UIColor colorWithHexString:@"#C1C1C1" setAlpha:1];
        _horizontalCursorBar.alpha = 1;
        [self addSubview:_horizontalCursorBar];
    
        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0];
        [self selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
    }
    
    -(void)layout {
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
        layout.itemSize = CGSizeMake(self.frame.size.width / 4, self.frame.size.height);
        layout.minimumInteritemSpacing = 10;
        layout.minimumLineSpacing = 0;
        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        self.collectionViewLayout = layout;
        [self reloadData];
    }
    
    -(NSArray *)dataPage {
        return [NSArray arrayWithObjects:@"ATENEO",@"STATISTICHE",@"CALENDARIO",@"NOTIFICHE", nil];
    }
    
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
        return [self dataPage].count;
    }
    
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
        static NSString *cellID = @"SCC";
        UDSectionNavCell *cell = (UDSectionNavCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
        cell.titlePage.text = [[self dataPage] objectAtIndex:indexPath.item];
        return cell;
    }
    
    -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    
        NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:indexPath.row inSection:0];
        [self scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
    
        if (indexPath == newIndexPath) {
            [self scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
        }
    
        [UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:1 initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseOut animations:^{
            CGFloat x = (indexPath.item) * self.frame.size.width / 4;
            _horizontalCursorBar.frame = CGRectMake(x, self.frame.size.height - 6, self.frame.size.width / 4, 3);
        } completion:nil];
    }
    

    这是CollectionView 2(页面单元格)的代码

    static NSString * const reuseIdentifier = @"Cell";
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
    
        UICollectionViewFlowLayout *collectionLayout = [[UICollectionViewFlowLayout alloc] init];
        collectionLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        collectionLayout.minimumLineSpacing = 0;
        self.collectionView.collectionViewLayout = collectionLayout;
        [self.collectionView  reloadData];
        self.collectionView.pagingEnabled = YES;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
    }
    
    #pragma mark <UICollectionViewDataSource>
    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
        return 1;
    }
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
        return 4;
    }
    -(CGSize)collectionView:(UICollectionView *)collectionView layout:(nonnull UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
        return CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
    }
    
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
        UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    
        NSArray *array = [NSArray arrayWithObjects:[UIColor redColor],[UIColor blueColor], [UIColor clearColor], [UIColor grayColor], nil];
        cell.backgroundColor = array[indexPath.item];
    
    
        return cell;
    }
    
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
        NSLog(@"%f",scrollView.contentOffset.x / 4);
    }
    

    我需要在collectionView 2类中传递scrollViewDidScroll方法的ContentOffset值,并在collectionView类1中使用它

0 个答案:

没有答案