UIView setFrame updaterar inte bounds

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1

Förmodligen har jag missat något fundamentalt när jag har gjort följande metod?

+(void)moveView:(UIView*)view byLeft:(float)x andLower:(float)y {
	
	NSLog(@"Input: %f", y);

	float height = view.bounds.size.height;
	float width = view.bounds.size.width;
	
	CGRect rect = CGRectMake(x, y - height, width, height);
	
	[view setFrame: rect];
	
	NSLog(@"Result: %f", view.bounds.origin.y);
}

När jag kör denna metoden i loadView så loggas "Input: 50" och "Result: 0". Dock kommer min UIView att flyttas till den angivna positionen när den renderas. Tyvärr pajjar det hela min teori om att kunna lägga en vy vid sidan om en annan vy.

Någon som vet hur jag ska lösa detta?

  • Medlem
  • Stockholm
  • 2008-09-25 22:54

Vet inte om vi får diskutera detta, men rent allmänt flyttar du ju view här:

[view setFrame: rect];

Det är ju samma objekt som får en ny frame. Du kan skapa ett nytt objekt och sedan skicka setFrame till det nya objektet.

[nyView setFrame: rect];

Vänligen, Ylan, som tycker att det är helt otroligt att man inte längre vet vad man får säga och inte.

Jag instämmer, har tappat glädjen med telefonen. Synd att den är sjukt bra, annars hade jag sålt den.

Som du ser så sätter jag frame precis som du säger. Men det återspeglas inte i .bounds.. Läste någon stans att det kan bero på animation, och att byn helt enkelt inte nått den nya positionen ännu. Någon som vet hur man stänger av eventuellt animationsbeteende?

  • Medlem
  • Stockholm
  • 2008-09-26 14:32
Ursprungligen av fixarfrasse:

Men det återspeglas inte i .bounds.. Läste någon stans att det kan bero på animation, och att byn helt enkelt inte nått den nya positionen ännu. Någon som vet hur man stänger av eventuellt animationsbeteende?

men

Ursprungligen av fixarfrasse;:

Tyvärr pajjar det hela min teori om att kunna lägga en vy vid sidan om en annan vy.

Vill du ha en eller två objekt, eller vill du flytta det enda objektet?

Sedan kan det kanske vara så att objektet inte uppdateras förrän det ritats om i sin nya state.

Vänligen, Ylan

Ursprungligen av Ylan:

men

Vill du ha en eller två objekt, eller vill du flytta det enda objektet?

Sedan kan det kanske vara så att objektet inte uppdateras förrän det ritats om i sin nya state.

Jag har gjort en metod som flyttar ett objekt (A) till en position på skärmen, sedan har jag gjort ytterligare en metod som flyttar ett objekt (B) kloss_i_kloss med ett annat angivet objekt (A). Den senare metoden är då tänkt att fungera genom att bland annat använda bounds.origin från objekt A.

Om det nu är som du säger att objektets state ändras först när det blivit omrenderat så har jag ett problem. Skall dock testa att stänga av animation så snart jag har tid att titta på det igen.

  • Medlem
  • Mark
  • 2008-09-26 08:52

För att stänga av animeringar i Cocoa så kapslar man in kod med begin och commit:
[CATransaction begin];
...
...
[CATransaction commit];

/petri

  • Medlem
  • Göteborg
  • 2008-09-26 10:59

Det är inte så att du försöker göra en UIView med negativt y värde? (0,0) är uppe i vänstra hörnet. CGRect rect = CGRectMake(x, y - height, width, height); verkar inte stämma. Dvs är din UIViews height större än förflyttningen y så blir det värdet negativt. Vill du flytta ner din view så blir det nog så här:

CGRect rect = CGRectMake(view.bounds.origin.x + x, view.bounds.origin.y + y, view.bounds.size.width, view.bounds.size.height);

Jag har inte testat så jag kanske har tänkt fel men ett försök är det i vilket fall!

1
Bevaka tråden