Изменить размер MaskedLayer над UIView

У меня есть два UIImageViews которые занимают весь экран, что означает, что их фреймы: (0,0,320,480) . imageView2 находится поверх imageView1 .

Они оба имеют маски, применяемые к ним, используя CAShapeLayer . Я сделал функцию

 -(void)addMask:(CGRect)rect toView:(UIImageView*)imageView 

который выглядит следующим образом

 //Function -(void)addMask:(CGRect)rect toView:(UIImageView*)imageView { CAShapeLayer * shapeLayer = [[CAShapeLayer alloc] init]; CGPathRef path = CGPathCreateWithRect(rect, NULL); shapeLayer.path = path; CGPathRelease(path); imageView.layer.mask=shapeLayer; imageView.layer.masksToBounds=YES; } 

Я применяю маски над UIImageViews в viewDidAppear используя следующие CGRects :

 //In view did Appear [self addMask:CGRectMake(0,0,160,480) toView:self.imageView]; [self addMask:CGRectMake(160,0,160,480) toView:self.imageView2]; 

Таким образом, на экране отображается половина imageView1 показывающая половину imageView1 с левой стороны и половину imageView2 с правой стороны.

У меня есть кнопка, IBAction(buttonPressed:) с IBAction(buttonPressed:) .

То, что я хочу достичь, – это когда кнопка нажата, маску изображенияView1 увеличивается, а маска UIImageView2 уменьшается: так, что изображениеView1 слева занимает 75% экрана, а изображениеView2 справа занимает 25% экрана , То, что я пытаюсь сделать прямо сейчас, находится в коде ниже, но это не дает желаемых результатов:

 //In IBAction CGRect tmpRect ; tmpRect = imageView1.layer.frame; NSLog(@"Rect1 : %@",NSStringFromCGRect(tmpRect)); tmpRect.size.width+=20.0; [self addMask:tmpRect toView:self.imageView]; tmpRect= imageView2.layer.frame; NSLog(@"Rect2 : %@",NSStringFromCGRect(tmpRect)); tmpRect.origin.x+=20.0; tmpRect.size.width-=20.0; [self addMask:tmpRect toView:self.imageView2]; 

Выход

 2013-08-26 13:15:41.753 imageMasking[16191:c07] Rect1 : {{0, 0}, {320, 460}} 2013-08-26 13:15:41.754 imageMasking[16191:c07] Rect2 : {{0, 0}, {320, 460}} 

Имеет представление о том, чего я пытаюсь достичь.

введите описание изображения здесь

Также позже я хотел бы переместить маски с помощью panGesture . Так что это хорошая идея применять маски тысячу раз, пока ваши пальцы перетаскиваются с помощью этой функции?
Есть ли другая альтернатива тому, чего я пытаюсь достичь, поскольку я могу быть совершенно неправой в моем подходе.

благодаря

Проблема в том, что при нажатии кнопки вы всегда layer.frame на layer.frame который является полным кадром изображения, а не текущим фреймом, на который вы маскируете. Вы должны сохранить позицию вашей разделенной линии, как CGFloat , в свойстве и, как вы хотите изменить маску, сначала обновите это свойство, а затем используйте его для вычисления новых путей маски.

Вы не должны беспокоиться о производительности, пока у вас нет причин. Т.е. использование / тестирование говорит вам, что вам нужно внести изменения. Затем вы должны профиль, чтобы узнать, что вызывает проблему, и затем работать над этим.

Тем не менее, вам не нужно создавать новый слой формы каждый раз, просто обновлять путь.

  • iphone development: как поставить UIView над UITableView
  • создать непрямоугольный UIView
  • Преобразование координаты экрана в локальную точку UIView
  • Требуются ли контроллеры просмотра для приложения iOS?
  • Как я могу сделать UILabel или UIButton с двумя строками, первый с одним символом, а второй с двумя символами?
  • Зеркальное отображение UIView
  • Доступ к удобочитаемой пользовательской метке UIElement из приложения IOS
  • Как увеличить / уменьшить размер прямоугольника в соответствии с размером метки, когда я касаюсь ярлыка в объективе c
  • Обрезание UIView с траекторией безье. BezierPath, кажется, не применяется полностью
  • Как сделать часть подвид невидимой при выпуске из супервизора?
  • Как остановить прокрутку UIView с помощью таблицы?
  • Давайте будем гением компьютера.