2014-02-09 3 views
4

У меня есть UIScrollView, который содержит другие подсмотры, которые частично вычеркнуты вне scrollview. Эти виды простираются вертикально над scrollview. Возможно ли разрешить только просмотр субстратов вне верхней части прокрутки и не разрешать их рисовать вне левой и правой сторон прокрутки?Можете ли вы ограничить UIView Clip Subviews определенным сторонам представления?

Что происходит, так это то, что когда я вручную прокручиваю влево и вправо, subviews выводятся за пределы прокрутки из-за размера содержимого. После того, как subview's прокручивается вне рамки scrollview, я хочу обрезать subviews.

Любые предложения или это возможно?

ответ

1

Вы не можете указать отдельные стороны, которые вы хотели бы скопировать, но вы могли бы в основном подделать это, разместив новый UIView рядом с краем, который вы хотели скопировать (и так эффективно обрезать его). В качестве альтернативы вы могли бы подумать о том, как изменить иерархию представлений, чтобы вам вообще не нужно было снимать субвью (возможно, каким-то образом отредактировав границы прокрутки и макет).

+0

У меня есть UIView рядом с краем. Оба эти представления и scrollview имеют уровни alpha .7 alpha, поэтому трюк не будет работать, к сожалению. –

4

Мне удалось добиться этого эффекта, используя свойство mask и CALayer. Следующий фрагмент ролика только просмотр с верхней и левой стороны зрения:

let maskLayer = CALayer() 
maskLayer.backgroundColor = UIColor.blackColor().CGColor 
maskLayer.frame = CGRectMake(0, 0, 2000, 2000) 

aView.layer.mask = maskLayer 

Обратите внимание, что я использую произвольное число 2000 как ультраправые и нижние границы для отсечения, так что вам нужно отрегулируйте число в зависимости от того, как далеко вы хотите, чтобы ваши другие виды клипов были скопированы.

+0

Каким будет рамка, если вы хотите закрепить верхнюю часть, но не влево-вправо? – itsji10dra

+0

@RoNiT вам нужно сохранить края прямоугольника, который вы хотите скопировать по краям представления, к которому вы будете добавлять маску, поэтому попробуйте 'CGRectMake (-2000, 0, 2000, aView.bounds.height)' –

Смежные вопросы