Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何实施";选择性;UIView的clipToBounds,即剪裁某些子视图,但不剪裁其他子视图_Iphone_Uiview_Subview - Fatal编程技术网

Iphone 如何实施";选择性;UIView的clipToBounds,即剪裁某些子视图,但不剪裁其他子视图

Iphone 如何实施";选择性;UIView的clipToBounds,即剪裁某些子视图,但不剪裁其他子视图,iphone,uiview,subview,Iphone,Uiview,Subview,我想将视图的一些子视图剪裁到视图的边界,而不是其他子视图。关于如何快速、轻松地实施这一点的任何想法 对于上下文:我有一个UIScrollView,其中包含一组可以从视图中拖出的子视图。将它们拖离视图时,我希望子视图不会被剪裁。否则我就要剪掉 如果我在布局子视图之前执行[view setClipToBounds:YES],在我开始拖动子视图之前,一切都很好。如果在开始拖动时,我在touchesBegind:withEvent上执行[view SetClipBounds:NO],在toucheSe

我想将视图的一些子视图剪裁到视图的边界,而不是其他子视图。关于如何快速、轻松地实施这一点的任何想法

对于上下文:我有一个UIScrollView,其中包含一组可以从视图中拖出的子视图。将它们拖离视图时,我希望子视图不会被剪裁。否则我就要剪掉

  • 如果我在布局子视图之前执行[view setClipToBounds:YES],在我开始拖动子视图之前,一切都很好。如果在开始拖动时,我在touchesBegind:withEvent上执行[view SetClipBounds:NO],在toucheSend:withEvent:上执行[view SetClipBounds:YES],则在拖动过程中,滚动视图会重新绘制,因此会显示先前剪裁的子视图
  • 我尝试过但没有成功的一种方法是,一旦开始拖动,就将子视图从scrollview移动到scrollview的superview(在子视图的touchesBegind:withEvent中)。但是,当视图从一个视图移动到另一个视图时,它似乎会失去接触的轨迹,并且拖动结束

    • 我用以下方法解决了我的问题。当scrollview的子视图接收到touchesBegind:withEvent:时,我将该子视图的alpha设置为0.0。然后创建一个相同的子视图,并将其添加到scrollview的superview中。对于初始位置,我使用以下内容:

      CGPoint newOrigin = [self origin];
      newOrigin.x = newOrigin.x + [[self superview] origin].x;
      newOrigin.y = newOrigin.y + [[self superview] origin].y - [(UIScrollView*)[self superview] contentOffset].y;
      [newSubview setOrigin: newOrigin];  // setOrigin is defined in a category on UIView - it does what you'd expect
      
      (注意-如果不补偿scrollview内容偏移量,可能会出现令人费解的行为…)


      My touchesMoved:withEvent方法移动子视图(按照实现拖动的正常方式),然后ToucheSEnd:withEvent从scrollview的超级视图中删除额外的子视图,并将初始子视图的alpha设置回1.0。因此,实际上,附加的子视图是在不可见子视图的基础上实现的。

      为什么不在UIScrollViewDelegate方法中实现它呢?您应该在答案中添加“更新”并接受它。谢谢Jesse。我接受了你的建议,做到了。