Не могу правильно добавить capinsets в Xcode

Я работаю над настраиваемой клавиатурой для iOS 8. И у меня есть изображение для фона кнопок. Например, возьмем вот это -> введите описание изображения здесь

В будущем это изображение будет иметь закругленные углы. Проблема с кнопкой пробела, если я добавляю это изображение для фонового изображения, размер изображения будет изменен, а закругленные углы не будут такими, как я хотел (потому что кнопка пробела слишком длинная). Поэтому я решил добавить капинсеты. В этом случае изображение имеет размер 64x64, а значения capinsets - 2 пикселя сверху, 2 пикселя слева, 2 пикселя снизу и справа. Поскольку в Xcode capinsets вычисляется из центра, я пишу такой код (в данном случае borderSize == 0):

private func imageWithCapinsetsForImage(initalImage: UIImage) -> UIImage {
    let halfOfImageWidth = currentImage.size.width / 2
    let halfOfImageHeight = currentImage.size.height / 2
    let capinsetsCalculatedFromImageCenter = UIEdgeInsets(top: halfOfImageHeight - capinsets.top - borderSize, left: halfOfImageWidth - capinsets.left - borderSize, bottom: halfOfImageHeight - capinsets.bottom - borderSize, right: halfOfImageWidth - capinsets.right - borderSize)
    let imageWithCapinsets = initalImage.resizableImageWithCapInsets(capinsetsCalculatedFromImageCenter)
    return imageWithCapinsets
}

Это код на языке Swift, в Objective-C та же проблема. Когда я добавляю такие capinsets на фоне космической кнопки (самая длинная кнопка), центральная линия между серым и черным цветом больше не находится в центре (чем длиннее кнопка - тем ниже эта линия). Кто знает почему? И как я могу это исправить? И экран: введите описание изображения здесьЕсли я работаю с таким кодом:

private func imageWithCapinsetsForImage(initalImage: UIImage) -> UIImage {
        let capinsetsCalculatedFromImageCenter = UIEdgeInsets(top: capinsets.top + borderSize, left: capinsets.left + borderSize, bottom: capinsets.bottom + borderSize, right: capinsets.right + borderSize)
        let imageWithCapinsets = initalImage.resizableImageWithCapInsets(capinsetsCalculatedFromImageCenter)
        return imageWithCapinsets
    }

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


person Vasyl Khmil    schedule 26.07.2014    source источник
comment
Как выглядит изображение? Разместите скриншот полученного результата.   -  person duci9y    schedule 26.07.2014
comment
Я не на своем компьютере Mac, но я сам сделал то, что он собой представляет. Алос, я видел, что capinsets - это не 1 пиксель, а 2 пикселя, может ли проблема быть в этом?   -  person Vasyl Khmil    schedule 26.07.2014
comment
Опубликуйте исходное изображение, контекст, в котором вы используете изображение, и снимок экрана с фактическим результатом, который вы получите.   -  person duci9y    schedule 26.07.2014
comment
Я добавил изменения, которые вы хотите, но я не могу опубликовать контекст, потому что слишком много кода, чтобы понять, где и как я вызываю эти функции.   -  person Vasyl Khmil    schedule 28.07.2014


Ответы (1)


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

UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
person drewag    schedule 26.07.2014
comment
второе изображение, которое я добавил, является результатом расчета capinsets, как вы сказали - person Vasyl Khmil; 28.07.2014