UIMotionEffect 同时在 UICollectionViewCell 中不起作用
Posted
技术标签:
【中文标题】UIMotionEffect 同时在 UICollectionViewCell 中不起作用【英文标题】:UIMotionEffect same time not work in UICollectionViewCell 【发布时间】:2014-02-26 10:20:21 【问题描述】:我在单元格子视图上添加运动效果。 第一次它工作得很好。 但是当细胞重复使用时。运动效果不起作用....
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
testcell *processingCell = (testcell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
UIInterpolatingMotionEffect *horizontalMotionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
horizontalMotionEffect.minimumRelativeValue = @(-kMotionEffectRelativeValue );
horizontalMotionEffect.maximumRelativeValue = @(kMotionEffectRelativeValue );
UIInterpolatingMotionEffect *verticalMotionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
verticalMotionEffect.minimumRelativeValue = @(-kMotionEffectRelativeValue );
verticalMotionEffect.maximumRelativeValue = @(kMotionEffectRelativeValue );
group = [[UIMotionEffectGroup alloc] init];
group.motionEffects = @[horizontalMotionEffect,verticalMotionEffect];
);
if (!processingCell.coustomView)
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
view.center = processingCell.contentView.center;
view.backgroundColor =[UIColor blackColor];
[processingCell addSubview:view];
processingCell.coustomView = view;
processingCell.coustomView.hidden = YES;
processingCell.coustomView.hidden = NO;
[processingCell.coustomView addMotionEffect:group];
return processingCell;
如果我想隐藏这个子视图。并在展示之后。那么运动效果就没用了
processingCell.coustomView.hidden = YES;
processingCell.coustomView.hidden = NO;
我尝试使用这个调试运动效果。子视图被暂停
po [UIView _motionEffectEngine]
https://github.com/sipdar/parallax-effect-Bug
【问题讨论】:
您应该提供更多信息,例如您尝试了什么,错误是什么,日志,... 对于它的价值,我正在做一些非常相似的事情,但也发现它不起作用。您的代码没有防止将相同的运动效果多次添加到单元格中(当重新使用单元格时),您应该这样做。我正在这样做,但我仍然遇到同样的问题。 【参考方案1】:我能够通过子类化 UICollectionViewCell 并在布局期间删除并重新应用运动效果来实现这一点。示例:
- (void) layoutSubviews
[super layoutSubviews];
[self addMotionEffectToView:self.contentView];
- (void) addMotionEffectToView:(UIView*) view
for (UIMotionEffect* effect in [view.motionEffects copy])
[view removeMotionEffect:effect];
... add your motion effect
【讨论】:
好提示。并且不要忘记在重新进入屏幕时重新加载可见单元格。以上是关于UIMotionEffect 同时在 UICollectionViewCell 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIMotionEffect 类在 IOS 6 中启动应用程序时崩溃