iOS: шкала UIImage для заполнения внутри UIView
Я делю UIView на подклассы, извлекаю удаленное изображение и затем рисую его в виде, используя drawRect. Это работает нормально, но изображение затем искажается в зависимости от того, что я установил для рамки просмотра.
Я могу добавить contentMode из UIViewContentModeScaleAspectFill в мой UIView, но, похоже, он вообще не применяется к моему UIImage, который я рисую, он все еще сжимает UIImage, потому что он соответствует размеру кадра представлений.
Кажется, что я должен сделать что-то вроде следующего, но это просто увеличит изображение на 100% в моем кадре, а не следуя настройке contentMode:
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
Нужно ли делать что-то конкретное в drawRect: чтобы мое изображение соответствовало свойству contentMode?
2 ответа
Я думаю, что самым простым решением было бы создать подкласс UIImageView вместо UIView и использовать свойство класса contentMode. Тогда вам не нужно вызывать drawRect, просто загрузите изображение в imageView.
В качестве альтернативы, если вам нужно создать подкласс UIView, добавьте UIImageView к вашему представлению, настройте пружины и распорки, установите contentMode и загрузите ваше изображение.
Вы могли бы использовать что-то вроде этого
// If we have a custom background image, then draw it, othwerwise call super and draw the standard nav bar
- (void)drawRect:(CGRect)rect
{
if (navigationBarBackgroundImage)
[navigationBarBackgroundImage.image drawInRect:rect];
else
[super drawRect:rect];
}
// Save the background image and call setNeedsDisplay to force a redraw
-(void) setBackgroundWith:(UIImage*)backgroundImage
{
self.navigationBarBackgroundImage = [[[UIImageView alloc] initWithFrame:self.frame] autorelease];
navigationBarBackgroundImage.image = backgroundImage;
[self setNeedsDisplay];
}