Масштаб CGPath подходит для UIVIew

Мне нужно знать, как я могу уменьшить или увеличить CGPath, чтобы он соответствовал UIView?

Установите цвет фона желтым, Чтобы четко видеть вид

self.frame = CGRectMake(0, 0, 181, 154); self.backgroundColor = [UIColor yellowColor]; 

Рисовать CAShapeLayer

 CAShapeLayer *shape = [CAShapeLayer layer]; shape.path = aPath; shape.strokeColor = [[UIColor blueColor] CGColor]; shape.lineWidth = 5; shape.fillColor = [[UIColor clearColor] CGColor]; [self.layer addSublayer:shape]; 

Затем я получаю: введите описание изображения здесь

Я хочу, чтобы это: введите описание изображения здесь

Спасибо разработчикам 🙂

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


В этом случае вы получите ограничительную рамку пути слоев формы и вычислите соответствующий коэффициент масштабирования для применения к пути.

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

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

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

Наконец, у вас есть новый путь, поэтому все, что вам нужно сделать, это создать новый слой с фигурой, назначить путь, соответствующим образом подобрать стиль и добавить его в представление.

 // I'm assuming that the view and original shape layer is already created CGRect boundingBox = CGPathGetBoundingBox(shapeLayer.path); CGFloat boundingBoxAspectRatio = CGRectGetWidth(boundingBox)/CGRectGetHeight(boundingBox); CGFloat viewAspectRatio = CGRectGetWidth(viewToFitIn.frame)/CGRectGetHeight(viewToFitIn.frame); CGFloat scaleFactor = 1.0; if (boundingBoxAspectRatio > viewAspectRatio) { // Width is limiting factor scaleFactor = CGRectGetWidth(viewToFitIn.frame)/CGRectGetWidth(boundingBox); } else { // Height is limiting factor scaleFactor = CGRectGetHeight(viewToFitIn.frame)/CGRectGetHeight(boundingBox); } // Scaling the path ... CGAffineTransform scaleTransform = CGAffineTransformIdentity; // Scale down the path first scaleTransform = CGAffineTransformScale(scaleTransform, scaleFactor, scaleFactor); // Then translate the path to the upper left corner scaleTransform = CGAffineTransformTranslate(scaleTransform, -CGRectGetMinX(boundingBox), -CGRectGetMinY(boundingBox)); // If you want to be fancy you could also center the path in the view // ie if you don't want it to stick to the top. // It is done by calculating the heigth and width difference and translating // half the scaled value of that in both x and y (the scaled side will be 0) CGSize scaledSize = CGSizeApplyAffineTransform(boundingBox.size, CGAffineTransformMakeScale(scaleFactor, scaleFactor)); CGSize centerOffset = CGSizeMake((CGRectGetWidth(viewToFitIn.frame)-scaledSize.width)/(scaleFactor*2.0), (CGRectGetHeight(viewToFitIn.frame)-scaledSize.height)/(scaleFactor*2.0)); scaleTransform = CGAffineTransformTranslate(scaleTransform, centerOffset.width, centerOffset.height); // End of "center in view" transformation code CGPathRef scaledPath = CGPathCreateCopyByTransformingPath(shapeLayer.path, &scaleTransform); // Create a new shape layer and assign the new path CAShapeLayer *scaledShapeLayer = [CAShapeLayer layer]; scaledShapeLayer.path = scaledPath; scaledShapeLayer.fillColor = [UIColor blueColor].CGColor; [viewToFitIn.layer addSublayer:scaledShapeLayer]; CGPathRelease(scaledPath); // release the copied path 

В моем примере кода (и формы) это выглядело так:

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

  • Как создать UIImage из текущего графического контекста?
  • iOS CoreGraphics: штрихование с полупрозрачными шаблонами приводит к повреждению цветов
  • Выполнение полностью настраиваемых анимаций с помощью Core Animation - производительность
  • Обнаружение отвода внутри пути безье
  • Анимация Core Animation вне экрана на экранную анимацию
  • Загрузка UIImage в фоновом потоке вызывает ошибку ImageIO
  • Вырезать форму с анимацией
  • Нарисуйте путь с переменной шириной в iOS
  • Анимация UIView вдоль дуги
  • Как дать разделение зигзагообразного слоя между двумя изображениями
  • Swift - Offscreen Rendering
  • Interesting Posts

    Кнопки панели вкладок все серые

    Загрузка нескольких табличных представлений в UIView (UIView Controller)

    Очистить полную базу данных Царства

    EXC_BAD_ACCESS SKPhysicsWorld

    xcode дублирует символы для ошибки архитектуры после обновления контейнеров какао

    Идентификаторы продуктов iPod / iPhone USB

    Соотношения CoreData равны нулю после mergeChangesFromContextDidSaveNotification

    iOS – NSFIleManager – Как работать с низким дисковым пространством

    Кнопка внутри пользовательского uitableviewcell не работает

    Преобразование из NSDate в NSString с переносом основной базы данных по атрибуту Не отображает строку надлежащим образом

    iOS тихий push-уведомление работает только при подключении к xcode

    ios Реализация UISwipeGestureRecogniser в любом направлении под любым углом

    NSPredicate с функцией CAST в FetchResultController

    Восстановительные веб-сервисы для мобильных приложений – Какой язык, инфраструктура, инфраструктура?

    «Вызов одного экземпляра диспетчера представлений более одного раза не поддерживается» исключение

    Давайте будем гением компьютера.