Изменение границ исходного изображения не оказывает никакого влияния. ...
//Following line has no effect:
self.imageView.bounds = CGRectMake(self.imageView.bounds.origin.x + 100, self.imageView.bounds.origin.y, self.imageView.bounds.size.width,self.imageView.bounds.size.height);
Это изображение, а не изображение.
Эффект изменения границ вида зависит от того, что вид делает для рисования. По сути, это означает, что вы не должны изменять границы представления, которое не является экземпляром созданного вами класса представления, поскольку вы не можете точно предсказать, как NSImageView будет рисовать свое изображение (предположительно, поскольку это элемент управления, он включает в себя его ячейку, но больше на это я бы не стал полагаться).
В целом, довольно редко можно изменить происхождение границ представления. Я не помню, чтобы когда-либо делал это, и я не могу придумать причину, чтобы сделать это. Изменение размера границ будет масштабироваться, а не обрезаться.
Я пытался обрезать изображение, но, похоже, оно не обрезается, я вижу полное изображение. Чего мне не хватает?
[carImage drawInRect:destRect fromRect:sourceRect operation:NSCompositeSourceOver fraction:1.0];
[self.imageView setImage:carImage];
Указание изображения для рисования ничего не меняет в изображении. Он не будет «обрезать изображение» таким образом, чтобы изображение впоследствии было меньше или больше. Вы говорите это рисовать, не более того.
Следовательно, оператор после этого устанавливает изображение представления изображения в целом, точно так, как если бы вы не сказали изображению рисовать, потому что указание рисовать не имело никакого значения.
Что говорит рисовать изображение, так это то, что оно говорит рисовать изображение. Для этого есть только два правильных места:
- Между
lockFocus
и unlockFocus
сообщениями для представления или изображения (или после установки текущего NSGraphicsContext).
- В методе
drawRect:
представления.
В другом месте не следует указывать объект Какао для рисования.
Один из правильных способов обрезки изображения - создать новое изображение нужного / настроенного размера, заблокировать на нем фокус, нарисовать в нем нужную часть исходного изображения и разблокировать фокус на новом изображении. После этого у вас будет как оригинальная, так и обрезанная версия.
Другим правильным способом было бы создание собственного пользовательского представления изображения, которое имеет два свойства: одно из которых имеет изображение для рисования, а другое - прямоугольник. Когда приказано рисовать, этот пользовательский вид скажет изображению нарисовать данный прямоугольник в границах вида. Тогда вы всегда будете держать исходное изображение и просто нарисуете только нужный раздел.