2013-10-16 13 views

Odpowiedz

18
CGRect frame = self.View1.frame; 
frame.size.height = self.view.bounds.size.height; 
self.View1.frame = frame; 
+1

Bądź ostrożny, choć. Trzymaj się obwiedni lub ramki. One nie są takie same. Jeśli na przykład zostanie obrócona do orientacji poziomej, ramka może nadal mieć oryginalne wymiary portretu, ale granice będą zawsze poprawne, ponieważ granice są aktualizowane przez dowolne przekształcenia zastosowane do widoku, w tym obrót. –

1
[self.View1 setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.x, self.view.frame.size.height, self.view.frame.size.height)]; 
4

Nie można modyfikować granice bezpośrednio. CGRect musi zostać zmodyfikowany poza granicami widoku.

CGRect viewBounds = self.view1.bounds; 
viewBounds.size.height = self.view.bounds.size.height; 
self.view1.bounds = viewBounds; 

Mam nadzieję, że to pomoże!

1

nie mam wystarczająco dużo reputacji, aby dodać krótki komentarz do niektórych innych odpowiedzi, więc pomogę zwrócić uwagę na kilka ważnych punktów tutaj:

(1) Jeśli po prostu zmieniając rozmiar, ustawić nowy bounds zamiast frame

Jeśli jesteś tylko patrząc do zmiany rozmiaru obrazu (ale zachować obraz w tym samym miejscu), a następnie cdownie za sugestię zakładania nowego bounds zamiast nowego frame. Na przykład, jeśli masz obraz wskazówki wskaźnika i chcesz sprawić, że będzie wyglądał tak, jakby dotykał ekranu, wtedy skalowanie rozmiaru bounds w dół i kopia zapasowa naprawdę szybko to osiągnie i zachowa tę samą lokalizację ekranu w jego punkt centralny, jeśli ustawisz punkt zakotwiczenia obrazu na środku. Jeśli zamiast tego zmieniono wartość frame, tak jak zasugerował Tony Friz, to po zmniejszeniu rozmiaru obrazu obraz przeciągnie do jego lewego górnego rogu (chyba że poprawisz to za pomocą dodatkowej matematyki).

(2) Jeżeli obraz utworzony w stalówki lub ujęć, wyłącz autoLayout i autosizing

autoLayout musi być wyłączona w stosunku do wszelkich poglądów, w której są ruchome obrazy wokół lub ich zmiany rozmiaru. Jeśli pozostawisz to, zachowanie będzie (oczywiście) dziwne i nieprzewidywalne. Ponadto, po wyłączeniu funkcji Autolayout, przejdź do Inspektora rozmiarów obrazu i ustaw poprawne pochodzenie (na przykład środek) i wyłącz wszystkie wiązania automatycznego zmniejszania, klikając dowolne stałe linie w siatce automatycznej, dopóki wszystkie nie będą przerywane liniami. W ten sposób będziesz mieć pełną kontrolę nad umieszczaniem obrazu, zmieniając właściwość i rozmiar center, ustawiając nową bounds.

Nadzieja to pomaga, Erik

Powiązane problemy