1

请帮助我,我正面临非常危急的情况,将视图拖到滚动视图的子视图中。

a:)我有滚动视图(让我们命名 A),在这个视图中覆盖了整个滚动视图(我们称之为 B),现在“B”包含 225 个子视图(15*15)(称为目标视图)。

b :)我在A下方有另一个视图,有 7 个子视图(称为tiles),每个图块都位于一个视图中(称为tileContaner View)。

问题 ?1. 当我在B的子视图(目标视图)内拖动图块时,它会消失。

要求 。将tile 视图从 tile 容器放置到 scrollview 的target view或Tile 与 Target 相交的B的子视图。

4

2 回答 2

0

在这个方法中删除 [tileView removeFromSuperview]; 行,因为它实际上删除了 tileView。

-(void)placeTile:(TileView*)tileView atTarget:(TargetView*)targetView {
[UIView animateWithDuration:0.35 delay:0.00 options:UIViewAnimationOptionCurveEaseOut animations:^{
}

谢谢。

于 2013-10-24T10:34:11.203 回答
0

// 根据我的评论构建

在 c 部分中, tileView.frame=CGRectMake(targetView.frame.origin.x, targetView.frame.origin.y, 20, 20); 我会认为因为你在做 targetView.frame.origin.x, targetView.frame.origin.y 它只是把它从屏幕上移开。我认为它应该是 0, 0 作为您添加以查看您从中获取坐标的内容。

 -(void)placeTile:(TileView*)tileView atTarget:(TargetView*)targetView {
           [UIView animateWithDuration:0.35 delay:0.00 options:UIViewAnimationOptionCurveEaseOut animations:^{

                 [tileView removeFromSuperview];
                 tileView.frame=CGRectMake(targetView.frame.origin.x, targetView.frame.origin.y, 20, 20);
                 [targetView addSubview:tileView];
                 NSLog(@"%f,%f,%f,%f",tileView.frame.origin.x,tileView.frame.origin.y,tileView.frame.size.width,tileView.frame.size.height);
                 [tileView bringSubviewToFront:targetView];

             }
             completion:^(BOOL finished){
            }];

请参阅您将 tileview 设置为具有与 targetView 相同的 x 和 y,但您添加到目标视图。我想你想把它放在 0,0 或者转换点。

       [UIView animateWithDuration:0.35 delay:0.00 options:UIViewAnimationOptionCurveEaseOut
       animations:^{

             tileView.frame=CGRectMake(0, 0, 20, 20);
             [targetView addSubview:tileView];
         }
         completion:^(BOOL finished){
        }];

编辑:

iMobile 提出了一个很好的观点,来自苹果的文档说 addSubview 如果在添加之前已经有一个超级视图,那么 addSubview 会删除它。

  "Views can have only one superview. If view already has a superview and that view is
   not the receiver, this method removes the previous superview before making the 
   receiver its new superview."
于 2013-10-24T10:38:48.517 回答