iOS 遇到的问题和解决方法(持续更新)

2017-03-04  本文已影响62人  我唔知啊
1、 指定CollectionView的Item滑动到顶部时,Section会盖住Item部分。
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:indexPath.row] 
                            atScrollPosition:UICollectionViewScrollPositionTop 
                                    animated:YES];

效果如图中红色框内:


CollectionView.png

暂时解决办法:换个显示Item的位置,即把UICollectionViewScrollPositionTop改成UICollectionViewScrollPositionCenteredVertically(中间)| UICollectionViewScrollPositionBottom(底部)

2、拖动View到屏幕边角时,layer贴紧边角。

知识点:Layer.position和Layer.anchorPoint


贴紧左上角.gif

代码:

static CGFloat MappingViewWidth = 100;
static CGFloat MappingViewHeight = 100;

- (void)testMappingMode {
    self.mappingView = [UIView new];
    self.mappingView.layer.contents = (id)[UIImage imageNamed:@"mapping_r1"].CGImage;
    [self.view addSubview:self.mappingView];
    // 这里用的是PureLayout,可换成其他
    self.mappingViewXConstraint = [self.mappingView autoPinEdge:ALEdgeLeft toEdge:ALEdgeLeft ofView:self.view withOffset:100.];
    self.mappingViewYConstraint = [self.mappingView autoPinEdge:ALEdgeTop toEdge:ALEdgeTop ofView:self.view withOffset:100.];
    [self.mappingView autoSetDimensionsToSize:CGSizeMake(MappingViewWidth, MappingViewHeight)];
    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveMappingView:)];
    [self.mappingView addGestureRecognizer:pan];
    
    self.combineLayer = [CALayer layer];
    self.combineLayer.frame = CGRectMake(0, 0, 200, 200);
    self.combineLayer.contents = (id)[UIImage imageNamed:@"mapping_map"].CGImage;
    // self.combineLayer添加到self.view.layer,相对位置基于self.view
    [self.view.layer insertSublayer:self.combineLayer below:self.mappingView.layer];
    self.combineLayer.position = CGPointMake(150, 150);
    self.combineLayer.anchorPoint = CGPointMake(0.5, 0.5);
}

- (void)moveMappingView:(UIPanGestureRecognizer *)gesture {
    CGPoint location = [gesture locationInView:self.view];

    // 移动View
    self.mappingViewXConstraint.constant = location.x-MappingViewWidth/2.;
    self.mappingViewYConstraint.constant = location.y-MappingViewHeight/2.;

    // 移动layer
    if (gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerStateCancelled) {
        // 如果也要贴紧右上角,修改条件和position即可
        if (location.x <= 100 && location.y > 100) {
            self.combineLayer.position = CGPointMake(0, location.y-MappingViewHeight/2.-50);
            self.combineLayer.anchorPoint = CGPointMake(0, 0);
        }else if (location.y <= 100 && location.x > 100) {
            self.combineLayer.position = CGPointMake(location.x-MappingViewWidth/2.-50, 0);
            self.combineLayer.anchorPoint = CGPointMake(0, 0);
        }else if (location.y <= 100 && location.x <= 100) {
            self.combineLayer.position = CGPointMake(0, 0);
            self.combineLayer.anchorPoint = CGPointMake(0, 0);
        }else {
            self.combineLayer.position = CGPointMake(location.x, location.y);
            self.combineLayer.anchorPoint = CGPointMake(0.5, 0.5);
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读