'Mobile' Categoria
Em Apple iPhone e iPod foram usados para gerenciar um único arquivo de imagem para carregar o aplicativo, o arquivo Default.png . Em iPad Apple, no entanto, a gestão diferente dell'orientamente requer a adoção de múltiplos arquivos de imagem, para ter certeza que você ver a tela inicial all'orientamente corrigido para o dispositivo. Durante a inicialização do aplicativo, como aconteceu com o iPhone, não é possível tirar o código para "maravilha" que o dispositivo orientado. Felizmente, ele foi introduzido no carregamento automático de arquivos especiais sobre a orientação:

Os ficheiros são suportados, para além do clássico Default.png que nunca se deve usar porque é dimensionado e deformada de acordo com a orientação, são:
- Padrão Portrait.png-
- Padrão PortraitUpsideDown.png-
- Padrão Landscape.png-
- Padrão LandscapeLeft.png-
- Padrão LandscapeRight.png-
e LandscapeRight possono essere utilizzate per determinare orietamento e verso di quest'ultimo. As versões PortraitUpsideDown , LandscapeLeft e LandscapeRight pode ser usado para determinar orietamento e para o último.
Para o aplicativo começa, então, como recomendado pela Apple, é bom para "redesenhar" - se necessário - as nossas opiniões agindo dentro application:didFinishLaunchingWithOptions .
Leia mais ...
Na maioria dos casos, ou porque estamos acostumados ou porque vimos em tutoriais e em alguns textos, usamos o setAnimationDidStopSelector desta maneira:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| nil context : NULL ] ; [UIView beginAnimations: contexto nulo: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [SetAnimationDelegate UIView: auto]; @selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)];
; myView.alpha = 0;
; [UIView commitAnimations];
/ /
void ) removeView { - (Void) {removeView ; [MyView removeFromSuperview]; } |
come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. No código acima o setAnimationDelegate definir self como delegado e através setAnimationDidStopSelector envia uma mensagem removeView quando a animação for concluída. O próprio código é correcta, no entanto, faz uso de uma definição de mensagem ( removeView ), que pode ser omitida. Agora, aqui é o mesmo código, com o mesmo efeito, sem a mensagem de removeView :
1 2 3 4 5 6 7 8 9
| nil context : NULL ] ; [UIView beginAnimations: contexto nulo: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [SetAnimationDelegate UIView: myView]; @selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)];
; myView.alpha = 0;
; [UIView commitAnimations]; |
! A coisa interessante sobre esta abordagem é que myView poderia ser uma subclasse de UIView ! Portanto, pode ser uma classe personalizada com as nossas próprias mensagens e, na forma definida, discretamente chamado por setAnimationDidStopSelector . Além disso, os setAnimationDidStopSelector seletores de acordo com parâmetros:
1 2 3 4 5 6 7 8 9
| nil context : NULL ] ; [UIView beginAnimations: contexto nulo: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [SetAnimationDelegate UIView: myView]; @selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1 :)];
; myView.alpha = 0;
; [UIView commitAnimations]; |
Este exemplo pode ser estendido para todos os casos aqui onde nós definir um delegado, atro não é um ponteiro para uma instância de qualquer objeto.
Leia mais ...
Depois de explicar como localizar as nossas cordas no Xcode , como vemos agora é simples - aplicando a mesma técnica - para localizar e visualizar as imagens / interfaces criadas com o Interface Builder.
Localize recursos gráficos
O processo, como mencionado, é o mesmo, se temos uma imagem já está incluído em nossos recursos, ou inserir um novo, e nós queremos "localizar" - isto é, gerenciamento de duas ou mais imagens com base nos idiomas suportados - basta clicar no botão Imagem à direita ( Adium.png neste exemplo) e selecione Get Info:

Nós clique em Criar Localizable arquivo no canto inferior esquerdo.

Clique em Adicionar e insira Localização Italian :

A fim de obter:

esattamente come accadeva con il testo: Nossa imagem é movido (fisicamente, uma das raras vezes quando isso acontece nell'alberatura Xcode é refletida no sistema de arquivos) em pastas virtuais English.lproj e Italian.lproj exatamente como aconteceu com o texto:

contiene una stessa versione dell'immagine. Neste ponto cada uma das pastas English.lproj e Italian.lproj contém a mesma versão da imagem. Esta imagem é manipulada dentro de Interface Builder, onde poderemos ver - por padrão - a versão em Inglês.
Neste ponto, simplesmente substituir um (ou ambos os arquivos Adium.png ) para se obter uma localização das imagens "flash".
Localize o XIB arquivos
Mesmo as interfaces construídas com Interface Builder pode ser localizado em sua totalidade, quando for considerado necessário. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: O procedimento é idêntico ao realizado com as capacidades gráficas: adicionar um ViewController (por exemplo infoViewController ) interface XIB, nós selecioná-lo, escolha Obter Informações no menu contextual, dar o localizável arquivo, adicionar localização em italiano:

Clique em Inglês ou Italiano irá abrir o Interface Builder! ) all'interno della classica cartella Classes . Desta vez, o sistema de arquivos, vamos notar que você criou dois diretórios ( English.lproj e Italian.lproj ) dentro da pasta Classes clássica. Ambos terão seus arquivos infoViewController.xib . O conforto no presente, claramente resolvida no código, quando vamos instanciar nosso código controlador teremos uma "limpa" como este:
1 2
| [ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc]; info.view ] ; [Self.view addSubview: info.view]; |
Como você pode ver não há qualquer vestígio de qualquer declaração relativa à localização, totalmente gerenciado pelo sistema. As duas interfaces, é claro, pode ser completamente diferente no que eles estão em todos os aspectos como dois XIB ficheiros separados.
Leia mais ...
Talvez eu devesse escrever "Muito, muito, pequenos trechos", no entanto, é um excelente e conveniente "truque" que eu vou mostrar. Executando os "dois" linhas de código abaixo, você pode obter a saída de qualquer URL e manipulá-lo.
Leia mais ...
Executar um método após n segundos
A família toda performSelector é muito interessante e pode ser útil em um grande número de casos. A sua aplicação mais simples e mais comum é o seguinte:
1 2 3 4 5
| @selector ( myMethod ) withObject : nil afterDelay : 3 ] ; [Self performSelector: @ selector (myMethod) withObject: afterDelay nil: 3]; / / void ) myMethod { - (Void) {myMethod "Hello World!" ) ; NSLog (@ "Olá Mundo!"); } |
No entanto, consideram que o "timer" não é preciso. Este procedimento, portanto, deve ser usado quando não é necessário precisão do tempo "considerável".
Recuperar a versão do
1 2
| version = [ [ [ NSBundle mainBundle ] infoDictionary ] objectForKey : @ "CFBundleVersion" ] ; NSString * versão = [[[ NSBundle mainBundle] infoDictionary] objectForKey: @ "CFBundleVersion"]; "versione = %@" , version ) ; NSLog (@ "Version =% @", versão); |
Sim, é verdade ou verdadeiro?
e TRUE sono in pratica la stessa edentica cosa: Vai passar um pente fino o iPhone da Apple Kernel você pode perceber que YES , true e TRUE são praticamente a mesma coisa edentica:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| / / Definição do SIM # Define SIM (BOOL) 1 # Define NO 0 (BOOL)
/ / Definição de verdade # Define 1 true # Define 0 false
/ / Definição de TRUE # Se! Definida (TRUE) # Define um VERDADEIRO # Endif
# Se! Definida (FALSE) # Define 0 false # Endif |
Pelo menos por agora ...
Vibração
1 2 3
| # Importar <AudioToolbox/AudioToolbox.h> / / ; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); |
Ponteiro CGImageRef a partir de um UIImage
1 2 3 4
| [ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage * coração = [UIImage imageNamed: @ "LittleHeart.png"]; heart CGImage ] ; CGImageRef imagem = [coração CGImage]; / / A imagem pode agora ser "varridas" em um CGContextRef CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, imagem); |
Animações
1 2 3 4 5
| nil context : NULL ] ; [UIView beginAnimations: contexto nulo: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; / / ... ; [UIView commitAnimations]; |
NSLog
1 2 3
| "NSString object %@ " , myString ) ; NSLog (@ "objeto NSString% @", myString); "Float: %f " , myFloat ) ; NSLog (@ "float:% f", myFloat); "Integer: %i " , myInt ) ; NSLog (@ "Integer:% s", myInt); |
Conversor de RGB para UIColor
1
| # Define RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 verde: azul g/255.0: b/255.0 alfa: a] |
Passando parâmetros para um NSTimer
Explorando o parâmetro userInfo você pode enviar um ponteiro para nosso objeto para o método invocado pelo temporizador.
1 2 3 4 5 6 7 8 9 10 11 12 13
| scheduledTimerWithTimeInterval : 1 target : self selector : @selector ( timerMethod ) userInfo : objectPointer repeats : YES ] ; [ NSTimer scheduledTimerWithTimeInterval: 1-alvo: seletor self: @ selector (timerMethod) userInfo: repete objectPointer: YES]; / / ... void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) {temporizador / / Recupera o ponteiro para o meu objeto timer userInfo ] ; objectPointer = [temporizador userInfo]; / / Ou myMethod ] ; [[Temporizador userInfo] myMethod]; [ [ timer userInfo ] myProperty ] ; int a = [[temporizador userInfo] myProperty]; / / O que é o mesmo [ objectPointer myProperty ] ; int a = [objectPointer myProperty]; } |
Tempo de duração
Aqui está uma maneira simples de calcular o tempo curto necessário para verificar a velocidade de execução de código:
1 2 3 4
| ; CFAbsoluteTime CFAbsoluteTimeGetCurrent initialTime = (); / / ... código ; CFAbsoluteTime CFAbsoluteTimeGetCurrent finalTime = (); "Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "f% o tempo decorrido", finalTime - initialTime); |
Leia mais ...
Eu gostaria de mostrar e discutir alguns exemplos sobre como adicionar e manipular as propriedades em Objective-C classe. : Um exemplo clássico, precisamente, é a seguinte: na definição da nossa classe de interface que definimos duas propriedades nome e cognome :
e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: No arquivo de implementação, nós inserimos a declaração @synthesize de modo que Xcode irá produzir para nós a métodos getter e setter , respectivamente, usados para ler e definir nossas duas propriedades:
1 2 3 4 5 6 7 8
| / / MyClass.m # Importar "MyClass.h"
@ Implementação MyClass
@ Name sintetizar, sobrenome;
@ End |
, possiamo scrive: Quando você estiver indo para usar a nossa classe MyClass , que é quando istanziaremo um objeto do tipo MyClass , podemos escrever:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| / / Qualquer outra classe, como AppDelegate / / No arquivo. H # Importar <UIKit/UIKit.h> # Importar "MyClass.h" @ Classe TestViewController; NSObject <UIApplicationDelegate> { @ TesAppDelegate Interface: NSObject {<UIApplicationDelegate> UIWindow janela *; * TestViewController viewController; MyClass * myClass; } / / No arquivo. M MyClass alloc ] ; myClass = [MyClass alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome); |
Ou, o que é equivalente a:
1 2 3
| / / Sempre no arquivo. M @ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @" [myClass nome]); |
So far so good. No entanto, ele poderia enganar a equivalência de "variabli" interno (ivar) como propriedade real. Para compreender a diferença, propor novamente o mesmo que fazer sem, desta vez, a @synthesize . . Agora, portanto, devemos tratar-nos a escrever a métodos getter e setter . Para enfatizar ainda mais as diferenças, as variáveis internas rinominerò inserir um sublinhado antes do nome. Mas nós vemos o código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # Importar <Foundation/Foundation.h> NSObject { @ Interface MyClass: NSObject { _nome; NSString * _name; _cognome; NSString * _cognome; } NSString * ) nome; // get - ( NSString *) nome; / / pega NSString * ) cognome; // get - ( NSString *) nome; / / pega void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / set / void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / set / @ End |
. Ao contrário do exemplo anterior, os apontadores para as variáveis internas (incapsultate) tornaram-se _nome e _cognome . . @property è scomparso, in quanto non serve più. Além disso, existem quatro definições de métodos que representam o nosso get e set . @property desapareceu, como não precisava mais.
Vemos o arquivo de implementação MyClass.m :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # Importar "MyClass.h" @ Implementação MyClass / / Pega um "nome" NSString * ) nome { - ( NSString *) nome { _name Retorno; } / / Definido como "nome" void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso _name = StringaIngresso; } / / Pega para "sobrenome" NSString * ) cognome { - ( NSString *) nome { _cognome retornar; } / / Definido como "Last Name" void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
Uma classe de modo escrita pode ser utilizado exactamente como o anterior, a saber:
1 2 3 4 5 6 7 8
| MyClass alloc ] ; myClass = [MyClass alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);
/ / Ou, o que é equivalente a:
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @" [myClass nome]); |
e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . No nível de negligência educacional @synthesize nos obrigou a escrever "os seus próprios métodos de get e set , com destaque - mesmo com a adição dell'underscore - as diferenças entre o nome da propriedade e sua ivar interna _nome .
permette un reale controllo del dato prima della sua impostazione (o prima della sua lettura) e quindi un reale incapsulamento per proteggere la variabile interna. A nível funcional do uso pessoal dos métodos de get e set permite o controle real dos dados antes da sua definição (ou antes de sua leitura) e, em seguida, um encapsulamento real para proteger a variável interna.
Por exemplo, seria possível impedir a passagem de cadeias vazias para a propriedade de nome :
1 2 3 4
| void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sem nome"; _name = StringaIngresso; } |
Outra variante
Se você quiser usar as variáveis internas com o sublinhado na frente (que rpoviene Adobe ActionScript pode ser usado como bem) não é necessário abandonar o uso da diretiva @synthesize . Xcode torna possível "mesclar" os métodos acima:
1 2
| _nome; Sintetizar @ name = _name; _cognome; Sintetizar @ name = _cognome; |
. Ao fazê-lo nós poderíamos usar internamente ponteiro _nome ", resumiu" - para o exterior - como uma propriedade de nome . e setter , è vero anche che lo fa solo se non li trova, quindi se desiderate “implementare” un vostro metodo di getter e/o setter potete farlo anche se avete usato la direttiva @synthesize . Além disso, embora o uso de @synthesize produz métodos de geração (mensagens) de getter e setter , também é verdade que ele faz isso somente se ele encontra-los, por isso, se você quer "implementar" um método para o seu getter e / ou setter pode fazer isso mesmo se você usou a directiva @synthesize .
As alocações de memória
Nos exemplos acima eu ter omitido alguns detalhes importantes para uma implementação real. Primeiro de tudo, eu ainda não mostrei qualquer método init() , útil para a inicialização do objeto e valores padrão. Além disso, falta-lhe a adição de um método dealloc() :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| / Arquivo / MyClass.m # Importar "MyClass.h" @ Implementação MyClass id ) init { - (Id) {INIT self = [ super init ] ) { if (self = [super init]) { "Nome preimpostato" ; _name @ = "Nome da predefinição"; "Cognome preimpostato" ; _cognome @ = "Nome da predefinição"; } retornar auto; } void ) dealloc { - (Void) {dealloc ; [_name Lançamento]; ; [_cognome Lançamento]; ; [Super dealloc]; } NSString * ) nome { - ( NSString *) nome { _name Retorno; } void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sem nome"; _name = StringaIngresso; } NSString * ) cognome { - ( NSString *) nome { _cognome retornar; } void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ End |
, etc… No futuro, vamos então ver os detalhes sobre as propriedades readonly , retain , etc ... 
Leia mais ...
O nosso site não é mais visto apenas a partir de terminais de computador. Com a disseminação da telefonia móvel, graças ao iPhone, da Apple, o acesso ao site ou blog está cada vez mais sendo realizada por uma variedade de dispositivos móveis. Torne-se um Web Developer para muitos necessitam de ser capaz de interceptar e identificar os diferentes "agentes", ou seja, os meios pelos quais um usuário está vendo (navegação) nossas páginas.
Leia mais ...
non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Os estados UIControlStateSelected ou UIControlStateHighlighted não funcionam quando um UIButton modo é definido UIButtonTypeCustom ! Ou melhor, não funciona (porque reservado para outros tipos de botão), por exemplo, para criar um botão com dois estados: nota de alternância. Se nós criamos duas imagens (stato1.png e stato2.png) para o nosso botão, podemos proceder da seguinte forma:
1 2 3
| / / O arquivo de cabeçalho que nós criamos uma variável global para usaremo / / Mude o cheque foi ToggleFlag BOOL; |
Agora vamos criar o nosso botão:
1 2 3 4 5 6 7 8 9
| / / Criamos um botão e nós colocá-lo inicialmente no estado "stato1.png" / / Edit initWithFrame: (CGRect)} {100,100,50,50 com a posição e / / Tamanho da sua imagem tem ; toggleFlag = YES; [ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : ( CGRect ) { 100 , 100 , 50 , 50 } ] ; UIButton ToggleButton * = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: (CGRect) {100, 100, 50, 50}]; @ "" forState : UIControlStateNormal ] ; [ToggleButton setTitle: @ "" forState: UIControlStateNormal]; [ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton setBackgroundImage: [UIImage imageNamed: @ "stato1.png"] forState: UIControlStateNormal]; self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget ToggleButton: acção de auto: @ selector (onToggle :) forControlEvents: UIControlEventTouchUpInside]; toggleButton ] ; [Self.view addSubview: ToggleButton]; |
Quando você clicar no botão irá enviar uma mensagem para ser gerido onToggle :
1 2 3 4 5 6 7
| void ) onToggle : ( id ) sender { - (Void) onToggle: (id) sender { / / Recuperar ponteiro para UIButton ( UIButton * ) sender; UIButton buttonClicked * = (UIButton *) remetente; / / Executar o Toogle toggleFlag = toggleFlag!; [ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] forState: UIControlStateNormal]; } |
Leia mais ...
Uma alternativa muito fácil de executar um fluxo de um arquivo mp3 no iPhone da Apple pode ser:
Leia mais ...
o CGPoint , ad esempio. A sintaxe NSLog(@"%@", ... ); funciona e é usado para obter informações sobre objetos, mas não funciona em tipos de dados C como struct CGRect ou CGPoint , por exemplo. o NSStringFromCGPoint : Para aproveitar NSLog(@"%@", ... ); também no estilo C structs que possamos nos apoiar funções de conversão como NSStringFromCGRect() ou NSStringFromCGPoint :
1 2 3 4 5
| CGRect ) { 10 , 20 , 30 , 40 } ; CGRect mioRect = (CGRect) {10, 20, 30, 40}; CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64}; / / "Info rettangolo: %@" , NSStringFromCGRect ( mioRect ) ) ; NSLog (@ "retângulo Info:% @", NSStringFromCGRect (mioRect)); "Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "ponto Info:% @", NSStringFromCGPoint (mioPoint)); |
Especificamente, é possível refinar os procedimentos correspondentes pequenas macros úteis como:
1
| # Define NSLogRect (rect) NSLog (@ "% s (% 0.0f,% 0.0f) 0.0f% 0.0fx%", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height) |
Ou:
1 2 3 4
| # Define NSLogCGPoint (ponto) NSLog (@ "% s (% 0.0f,% 0.0f)", # point.x ponto, Point.y)
CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64}; ; NSLogCGPoint (mioPoint); |
Isso vai dar como saída:
1
| 32 , 64 ) mioPoint: (32, 64) |
Leia mais ...
Últimos Comentários
kOoLiNuS : @ Giovambattista Fazioli: obrigado! mais do que dispostos!
Giovambattista Fazioli : @ kOoLiNuS: Calmo, provavelmente você pode antecipar que WPX Cleanfix será livre, e ...
kOoLiNuS : @ kOoLiNuS: a falta
e uma 
kOoLiNuS : @ Giovambattista Fazioli: Assinei, mas quando eu era o meu uso amador da plataforma ...
Giovambattista Fazioli : @ kOoLiNuS: Sim, este é um problema conhecido. Ocorre quando as tabelas em questão são ...