2013-10-08 4 views
2

У меня есть изображение и на этом изображении я хочу повторить горизонтальную и вертикальную линию, поэтому я расширяю свое изображение.Увеличьте повторяющуюся горизонтальную линию и повторите вертикальную линию на iOS

Например у меня есть изображение 50X50, и я хочу, чтобы оно было 50x70, повторяя строку x = 15. Возможно ли это на iOS?

EDIT:

Хорошо я постараюсь быть более ясным. У меня есть изображение 60x60, которое в основном прямоугольное, с шириной 60 и высотой 60. Теперь я хочу, чтобы это изображение было 80x60, повторяя пиксели с x = 40. Или просто рисуем, у меня есть:

123456 
1 XXXAXX 
2 XXXAXX 
3 XXXAXX 
4 XXXAXX 
5 XXXAXX 
6 XXXAXX 

и я хочу, чтобы это было:

12345678 
1 XXXAAAXX 
2 XXXAAAXX 
3 XXXAAAXX 
4 XXXAAAXX 
5 XXXAAAXX 
6 XXXAAAXX 

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

+1

pls добавить более подробную информацию о скриншоте .... – Spynet

+1

Не можете опубликовать изображение? – neilco

ответ

1

Если я понимаю вопрос правильно, вы должны использовать:

(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets

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

UIImage *buttonImage = [[UIImage imageNamed:@"blueButton"] 
    resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)]; 

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

OBS: Это только хорошо работает для простых изображений, например изображений с градиентом, не будет работать хорошо.

Посмотрите here для более подробной информации.

8

Ключом к достижению желаемого результата является resizableImageWithCapInsets: по телефону UIImage. Например, возьмем следующую 50px на 50px изображения (Примечание: это версия @ 2x):

Retina-scale 50x50 image with a single pixel vertical red line offset by 15px in the x-axis

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

UIEdgeInsets redLine = UIEdgeInsetsMake(0, 15, 0, 34); 

Это определяет один пиксель широкий срез изображения компенсировано 15px слева. Смещение right составляет 34, потому что правый край растягиваемого среза составляет 16 пикселей и 50 (ширина изображения) минус 16 составляет 34.

Теперь, когда мы имеем UIEdgeInset, мы можем загрузить изображение и создать растяжению версию этого:

UIImage *stretchableImage = [[UIImage imageNamed:@"my_image"] resizableImageWithCapInsets:redLine]; 

Мы можем присвоить этот stretchableImage к UIImageView с рамкой, что нам нужно:

UIImageView *stretchedImageView = [[UIImageView alloc] initWithImage:stretchableImage]; 
stretchedImageView.frame = CGRectMake(100,100,70,50); // The image view is 70px wide 

В приложении, stretchedImageView будет выглядеть следующим образом:

enter image description here

Там еще один метод, который называется resizableImageWithCapInsets:resizingMode:, что позволяет плитки изображение среза, а не растягивать его, так что вы можете делать сумасшедшие вещи, как принять этот образ:

enter image description here

и плитки он горизонтально, как это :

enter image description here

0

Просто повторить изображение в UIImageView, как это:

var dottedLineView : UIImageView = { 
    let view = UIImageView() 
    view.contentMode = .scaleAspectFill 
    view.clipsToBounds = true 
    view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "dashedLine")) 

    return view 
}() 

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

  • Нет связанных вопросов^_^