Итак, у меня есть кнопка с настраиваемым uiview, содержащим uiimageview.
UIButton *myButton = [[UIButton alloc] init];
myButton.frame = CGRectMake(0, 0, 29, 29);
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 29, 29)];
UIImage *myImage = [UIImage imageNamed:@"sexy-pic-of-me"];
UIImageView *myImageView = [[UIImageView alloc] initWithImage:myImage];
myImageView.frame = CGRectMake(0,0,29,29);
[myView addSubview:myImageView];
[myButton addSubview:myView];
[self.view addSubview: myButton];
Мое изображение размыто, независимо от того, насколько увеличился или уменьшился размер. Что я здесь делаю не так?
2 ответа
Другие люди упомянули две возможные причины нечеткости
- размер изображения не соответствует размеру кадра, что приводит к масштабированию
- соотношение сторон изображения корректируется из-за режима содержимого
Третья возможная причина - использование в кадре нечетных чисел. По моему опыту, если center.x и / или center.y в UIView не целое число, то возникает нечеткость. Например, если вы установите рамку как
someView.frame = CGRect( 100, 100, 29, 29 );
Тогда все становится нечетким, потому что центральная точка указанного вида будет CGPoint( 114.5, 114.5 )
. Эта проблема в основном наблюдается на устройствах без сетчатки глаза. Устройства Retina имеют два пикселя на точку, поэтому координаты в половину точки допустимы, но другие координаты вне сетки могут по-прежнему вызывать нечеткость.
Попробуйте установить режим содержимого, например:
myImageView.contentMode = UIViewContentModeScaleAspectFit;
Подробнее о режимах содержимого: https : //developer.apple.com/library/ios/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/c/tdef/UIViewContentMode
UIViewContentMode
Options to specify how a view adjusts its content when its size changes.
typedef enum {
UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit,
UIViewContentModeScaleAspectFill,
UIViewContentModeRedraw,
UIViewContentModeCenter,
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
} UIViewContentMode;
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.