Nano Hash - криптовалюты, майнинг, программирование

UIImageView Bounds, Frame

Я знаю, что здесь много похожих вопросов, и я проверил известный, а затем понял разницу между Bounds и Frame.

Теперь у меня есть проблема, связанная с ними. Я поигрался с ними, но все оказалось не так, как я ожидал.

Вот чего я не понимаю:

  • Почему начало кадра Y на 44,000000 ниже верхнего, даже если я установил UIImageView в левом углу? Потому что границы должны быть такими: «Границами UIView является прямоугольник, выраженный как местоположение (x, y) и размер (ширина, высота) относительно его собственной системы координат (0,0)». (Какао: в чем разница между рамка и границы?) Я подумал, что рамка тоже должна начинаться здесь с левого угла.

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

#import "ViewController.h"

@interface ViewController ()

//@property (weak, nonatomic) IBOutlet UIImageView *image;
@property (weak, nonatomic) IBOutlet UIImageView *image2;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


//UIImage *imageView = [UIImage imageNamed:@"stanford"];

//    self.image.alpha = 1;
//    self.image.contentMode = 1;
//    self.image.image = imageView;
//    [self.image setAlpha:0.1];
//    [self.image setContentMode:UIViewContentModeCenter];
//    [self.image setImage:imageView];



    NSURL *url = [[NSURL alloc] initWithString:@"http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Pitbull_2%2C_2012.jpg/472px-Pitbull_2%2C_2012.jpg"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *imageData = [UIImage imageWithData:data];

    [self.image2 setBounds:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.image2 setImage:imageData];

    NSLog(@"frame.orign.x:%f,frame.origin.y:%f",self.image2.frame.origin.x,self.image2.frame.origin.y);







}

  • Я установил сетчатку iPhone на 4 дюйма, и он работает, но я до сих пор не знаю, почему метод setBounds не работает как есть. 16.02.2014

Ответы:


1

Значение магического числа 44 фактически берется из панели навигации :) В то время как высота строки состояния составляет 20 пункта.

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

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

строка состояния устанавливается с помощью

[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackTranslucent];

Панель навигации, если она отображается, можно настроить с помощью этого

theNavigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

Только тогда ваш следующий код отобразит ваш контент на весь экран.

[self.image2 setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]

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

16.02.2014
  • Большое спасибо, хорошо, я не использую панель навигации, но строка состояния установлена ​​по умолчанию? Я попробовал метод [setFrame:] без полупрозрачных методов, которые вы мне дали, и он также отображается как наложения. Как это работает? Я запуталась :( Спасибо, 16.02.2014
  • @Toshi Lol, так это решило твою проблему или нет? Причина, по которой это работает, заключается в том, что, насколько мне известно, строка состояния по умолчанию вызывает смещение точки происхождения, тогда как установка полупрозрачной строки состояния приведет к тому, что точка происхождения будет точно от того места, где статус бар нарисован. Таким образом, это приведет к тому, что строка состояния будет нарисована поверх вашего контента. 17.02.2014
  • большое спасибо. хорошо, поэтому установка полупрозрачности в основном означает изменение начала координат. Если полупрозрачность отмечена, экран отображается сверху строкой состояния / панелью навигации, и происхождение также изменяется вверх, а затем верх экрана скрывается, если мы не скрываем строку состояния / панель навигации ?? 17.02.2014
  • Источник автоматически обновляется, когда вы устанавливаете полупрозрачность строки состояния или панели навигации. Вы должны думать об этом так, что если вы установите полупрозрачную панель навигации / состояния, вы, по сути, говорите, что ваш контент можно рисовать под панелями навигации, а не рисовать под ними. Взгляните на приложение Gallery на своем устройстве iOS, и вы заметите, что панель навигации и строка состояния были настроены полупрозрачными, чтобы содержимое изображения могло занимать всю емкость экрана, чтобы обеспечить максимальное пространство на экране. 17.02.2014
  • Я очень ценю это!!! теперь я достаточно хорошо понимаю эту концепцию. кстати, я работаю над UIWebView и имею некоторые проблемы. Я думал, что эта концепция работает и для него, но это проявляется по-другому. Я размещаю вопрос здесь: stackoverflow.com/questions/21828333/, но ответа пока нет. Не могли бы вы проверить это, пожалуйста? 18.02.2014

  • 2

    44 идет от навигационной панели, которая занимает такую ​​большую высоту.

    16.02.2014
  • и еще один вопрос, как насчет установки self.image2 setFrame: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)]; вместо? Это должно охватывать весь экран, и почему это не закрывает строку состояния? 16.02.2014
  • @toshi Pavan здесь, чтобы ответить на оба ваших вопроса, вы можете взглянуть на мой ответ, чтобы понять, что происходит. :) в том числе, почему ваш контент не закрывает строку состояния 16.02.2014
  • Эй, Сэм, предупреждаю, я думаю, что значение 44 может быть панелью навигации. 16.02.2014
  • @pavan: Я ценю вашу помощь :) 16.02.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

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