PHP IDE dedicada ao desenvolvimento há muitos, que vão desde a liberdade de os pagar. Por muito tempo eu usei ferramentas como Eclipse ou o Aptana , chegando a fazer uso de editores especializados para HTML / JavaScript e - ainda - CSS. Há um ano, no entanto, eu acho que encontrei um ambiente completo que finalidade, pelo menos no meu caso, ele resolve todos os meus problemas: PhpStorm .
Artigos com a tag 'Desenvolvimento'
PhpStorm 2,0
Truque muito curtas: fazer invisível comentários HTML
Comentário HTML é uma prática durante os estágios iniciais de desenvolvimento Web, no entanto o código comentado permanece visível na página, mesmo que seja ignorado pelo navegador. Ao selecionar "View Source" ou "Code View" do nosso navegador, que será capaz de vê-lo.
Trecho muito curto: PHP, palavras cortadas, contando os caracteres
Como visto no trecho muito curto: PHP corte palavra é mais agradável para quebrar um texto para "palavras", pois evita o corte de uma palavra. Há ainda aqueles que preferem contar para cortar os personagens, como faz a "cortes" mais homogénea e mais semelhantes entre si, apesar do risco significativo de cortar uma palavra, rompeu a rede!
Como definir XCode usar o iPhone em vez do simulador
Objective-C: uma alternativa ao uso CGRectMake
CGRectMake() é uma função (na verdade uma linha # define) muito utilizada, especialmente quando você criar gráficos a partir de objetos de código ou interface do usuário. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Seu uso é, portanto, muitas vezes associada a inicialização de componentes UIKit , mas também a simples UIView ou UIImageView . CGRectMake() retorna um struct (tipo de estrutura) CGRect :
1 2 3 4 5 | struct {CGRect CGPoint origem; CGSize tamanho; }; typedef struct CGRect CGRect; |
: Que por sua vez é composta de duas diferentes struct CGPoint e CGSize :
1 2 3 4 5 6 7 8 9 10 11 12 13 | struct {CGPoint CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; Tamanhos / *. * / struct {CGSize CGFloat largura; CGFloat altura; }; CGSize CGSize typedef struct; |
. Que, por sua vez, outra vez, contêm tipos CGFloat ou tipo de float . Se analisarmos o código de CGRectMake () são:
1 2 3 4 5 6 7 8 | CG_INLINE CGRect CGRectMake (CGFloat x, y CGFloat, largura CGFloat, CGFloat altura) { CGRect rect; y; rect.origin.x = x, y = rect.origin.y; height; rect.size.width = altura, largura = rect.size.height; retorno rect; } |
Segue-se, portanto, que este pedaço de código:
1 2 3 4 | [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 12 , 409 , 100 , 40 ) ; gbutton.frame = CGRectMake (12, 409, 100, 40); @ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Press" Forst: UIControlStateNormal]; gbutton ] ; [MainWindow addSubview: gbutton]; |
Poderia muito bem ser escrito como:
1 2 3 4 | [ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect]; CGRect ) { 12 , 409 , 100 , 40 } ; gbutton.frame = (CGRect) {12, 409, 100, 40}; @ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Press" Forst: UIControlStateNormal]; gbutton ] ; [MainWindow addSubview: gbutton]; |
Apenas para acelerar as coisas "o código está sendo executado ... ![]()
Atalho Xcode
Xcode é um ambiente de desenvolvimento muito bom, agradável e cheio de detalhes que tornam a escrita de código eficiente e agradável. Entre elas está a facilidade de auto-completar ao digitar, especialmente quando escrever aplicativos para Apple iPhone, onde os quadros são muitas e lembre-se empresa de sintaxe e de nomenclatura de alguns.
iPhone SecondApp: Adivinhe o número - Parte 2
Como mencionado iPhone FirstApp: Adivinhe o número - Parte 1 vemos como fazer um aplicativo para o iPhone da Apple sem usar o Interface Builder! Na verdade, nós vamos eliminar arquivos físicos criado por Interface Builder, Xcode assistente. No final deste post, então, temos um pedido idêntico em todos os aspectos, ao obtido na primeira parte, com a diferença que nós vamos alcançar todos os nossos componentes visuais, incluindo a janela principal, completamente para código.
A aplicação já realizados, se você quiser apenas fazer o download, está disponível no meu repositório do Google Code:
Gostaria de apontar imediatamente como o ZIP deste exemplo com peso inferior a da última vez! ![]()
Criamos o projeto
Começamos criando o nosso projeto SecondApp (para distingui-lo de FirstApp), embora desta vez escolha Janela de aplicativos baseados em:

Agora vamos apagar tudo relacionado com o Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Excluir o arquivo MainWindow.xib , localizado na pasta de Resources : também excluí-lo do sistema de arquivos, em seguida, selecione Também Mover para o Lixo. nella casella Main nib file base name : Selecione então o arquivo SecondoApp-info.plist e excluir a referência ao MainWindow nib nome da caixa de arquivo principal base:

Neste ponto não temos mais qualquer Windows, pelo menos até o Interface Builder. , e modifichiamo la funzione main() in questo modo: Então vamos abrir o arquivo main.m , situado em Other Sources , e modificar a função main() assim:
1 2 3 4 5 6 7 8 9 10 11 | int argc, char * argv [ ] ) { int main (int argc, char * argv []) { pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc] init]; / / Ao remover o arquivo. XIB perdemos o ponto de / / Delegado à APP, em seguida, passá-lo para "mão" UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retVal = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate"); ; [Release Piscina]; retVal retorno; } |
Abra SecondAppAppDelegate.me então criar a janela principal em código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) {aplicativo / / Pega o tamanho da tela (320, 480) UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[Mainscreen UIScreen] applicationFrame]; / / Cria uma janela - como fizemos no Interface Builder bye bye [ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect]; / / Definir o plano de fundo da janela para amarela, para diferenciar / / O pedido anterior FirstApp [ UIColor yellowColor ] ] ; [MainWindow SetBackgroundColor: [UIColor yellowColor]]; mainWindow ] ; [Self setWindow: MainWindow]; ; [Janela makeKeyAndVisible]; ; [MainWindow release]; } |
Você já pode testar o aplicativo, se você começar uma janela amarela você fez tudo certo!
, necessario solo se si usa Interface Builder. No arquivo SecondAppAppDelegate.h podemos eliminar IBOutlet , apenas necessária se você usa o Interface Builder. Também acrescentar aqui que o nosso variáveis globais, a última vez que tinha entrado no Controller. Em seguida, modificar o arquivo SecondAppAppDelegate.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Import <UIKit/UIKit.h> NSObject <UIApplicationDelegate> { @ SecondAppAppDelegate Interface: NSObject {<UIApplicationDelegate> UIWindow janela *; UITextField número *; UIButton botão *; numeroACaso int; } nonatomic, retain ) UIWindow * window; @ Property (não atômica, reter) UIWindow janela *; void ) controllaNumero; - (Void) getNumber; @ End |
, in quanto non stiamo usando Interface Builder. Mais uma vez nós preparamos a definição do método controllaNumero , como da última vez, mas nós eliminamos a indicação IBAction , porque você não está usando o Interface Builder.
Vamos construir a interface a partir do código
É hora de criar o código usando todos os componentes de nossa interface. ed inseriamo il seguente codice: Vamos voltar para o arquivo SecondAppAppDelegate.m , posizioniamoci antes [mainWindow release] e insira o seguinte código:
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 | / / Cria a barra de título [ [ UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0 , 0.0 , 320.0 , 44.0 ) ] ; UINavigationBar myNavigationBar * = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320,0, 44,0)]; myNavigationBar.barStyle = UIBarStyleDefault; [ [ UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem navigationItem * = [[UINavigationItem alloc] initWithTitle: @ "Acho que um número"]; navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animado: NO]; myNavigationBar ] ; [Janela addSubview: myNavigationBar]; / / Criar o rótulo [ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)]; UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor]; ; myLabel.numberOfLines = 2; "iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "iPhone criou um número de 1 a 10, tentar adivinhar?" myLabel ] ; [Janela addSubview: myLabel]; / / Criar a entrada de texto UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; = número de [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)]; numero.borderStyle = UITextBorderStyleRoundedRect; numero.textAlignment = UITextAlignmentCenter; numero.keyboardType = UIKeyboardTypeNumberPad; "Inserisci il numero" ; numero.placeholder = @ "Digite o número"; numero ] ; [Janela addSubview: número]; / / Cria o botão UIButton buttonWithType : UIButtonTypeRoundedRect ] ; button = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30); @ "Premi qui" forState : UIControlStateNormal ] ; [Button setTitle: @ "Clique Aqui" Forst: UIControlStateNormal]; self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; Botão [AddTarget: acção de auto: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside]; bottone ] ; [Janela addSubview: Botão]; ; [MyLabel release]; ; [NavigationItem release]; ; [MyNavigationBar release]; |
della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Desde o ' applicationDidFinishLaunching corresponde a viewDidLoad como da última vez, logo após a [mainWindow release]; inserir:
1 | + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; |
Agora nós podemos fazer é implementar o método controllaNumero , que será idêntico (além do protótipo) para que o tempo usado pela última vez:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void ) controllaNumero { - (Void) {getNumber "Premuto bottone di controlla numero" ) ; NSLog (@ "número de controle pressionado o botão"); [ numero.text integerValue ] ; numeroInserito = int [numero.text integerValue]; message; NSString mensagem *; "Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "O número digitado é% d", numeroInserito); numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) { "Troppo basso..." ; message = @ "Too low ..."; ( numeroInserito> numeroACaso ) { Else} if (numeroInserito> numeroACaso) { "Troppo alto..." ; message = @ "Muito alto ..."; ( numeroInserito == numeroACaso ) { Else} if (numeroInserito numeroACaso ==) { "Bravo hai indovinato" ; message = @ "Bravo, você adivinhou-lo"; + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; "Numero pensato %d" , numeroACaso ) ; NSLog (@ "Número% d pensei," numeroACaso); } [ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc] "Responso" initWithTitle: @ "Resposta" mensagem: mensagem Delegado: nil "OK" cancelButtonTitle: @ "OK" ] ; otherButtonTitles: nil]; ; [AlertMessaggio show]; ; [AlertMessaggio release]; "" ; numero.text @ = ""; } |
Estamos a fazer!
Conclusões e considerações
, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Este exemplo não fazer uso direto de um UIView ou UIViewController , só porque eu queria deixá-lo tão simples e aligeirados quanto possível e, também, para mostrar que os elementos não são sempre necessários. No entanto inserir objetos diretamente na janela pode ter algum sentido neste exemplo e outros contextos esporádicos. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. O uso de UIView e UIViewController trazer benefícios em muitos outros casos, porém, alguns são ein praticamente indispensável, como veremos no futuro.
iPhone: todas as fontes do sistema
O iPhone da Apple fornece um número limitado de fontes para desenvolvedores. A lista de fontes disponíveis é facilmente alcançado através de código, como veremos. Se você quiser usar suas próprias fontes, como incluí-lo nos recursos, é um pouco mais articulada e conivolge também a emissão dos certificados (direitos) fontes "embed" ... falaremos mais tarde. Transformando em vez de as fontes oficiais presentes no iPhone são (clique na imagem para ampliar):
O Apple iPhone SDK fornece acesso a fontes do sistema especial. Estes são identificados por constantes especiais e são as seguintes:
1 2 3 | [ UIFont boldSystemFontOfSize : 12.0 ] ; UIFont myBoldFont * = [UIFont boldSystemFontOfSize: 12.0]; [ UIFont SystemFontOfSize : 12.0 ] ; UIFont mySystemFont * = [UIFont SystemFontOfSize: 12.0]; [ UIFont italicSystemFontOfSize : 12.0 ] ; UIFont myItalicFont * = [UIFont italicSystemFontOfSize: 12.0]; |
Se você realmente obter um ponteiro para uma fontes ODEI mostrado na imagem acima é só usar:
1 | [ UIFont fontWithName : @ "Helvetica-Bold" size : 22.0 ] ; UIFont myCustomFont * = [fontWithName UIFont: @ "Helvetica-Bold" size: 22.0]; |
Como você pode ver a gestão da fonte é especial, além da família (Helvetica, Courier, etc ...) deve especificar o tipo (negrito, itálico, etc ...). Na prática, portanto, a fonte deve ser equipado com esses recursos. A Helvetica, por exemplo, é representada por:
1 2 3 4 | Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique |
Se você deseja exibir suas fontes diretamente no iPhone, aqui estão algumas linha de código úteis:
1 2 3 4 5 6 7 8 9 10 11 12 | listOfFonts = [ [ NSArray alloc ] initWithArray : [ UIFont familyNames ] ] ; NSArray * listOfFonts = [[ NSArray alloc] initWithArray: [UIFont familyNames]]; subFontTypes; NSArray * subFontTypes; int i = 0 ; i< [ listOfFonts count ] ; i ++ ) { for (int i = 0; i <[listOfFonts count]; i + +) { "Font Family: %@" , [ listOfFonts objectAtIndex : i ] ) ; NSLog (@ "Família de fontes:% @" [objectAtIndex listOfFonts: i]); NSArray alloc ] initWithArray : [ UIFont fontNamesForFamilyName : [ listOfFonts objectAtIndex : i ] ] ] ; subFontTypes = [[ NSArray alloc] initWithArray: [UIFont fontNamesForFamilyName: [objectAtIndex listOfFonts: i]]]; int j = 0 ; j< [ subFontTypes count ] ; j ++ ) { for (int j = 0 j <[subFontTypes count] j + +) { "+----->Type: %@" , [ subFontTypes objectAtIndex : j ] ) ; NSLog (@ "+-----> Tipo:% @ "[objectAtIndex subFontTypes: j]); } ; [Release SubFontTypes]; } ; [ListOfFonts release]; |
Com o SDK 2.2.1 no meu simulador, eu tenho:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | Família de fontes: Courier +-----> Tipo: Courier +-----> Tipo: Courier-BoldOblique +-----> Tipo: Courier-Oblique +-----> Tipo: Courier-Bold Família da fonte: AppleGothic +-----> Tipo: AppleGothic Família de fonte: Arial +-----> Tipo: ArialMT +-----> Tipo: Arial-BoldMT +-----> Tipo: Arial-BoldItalicMT +-----> Tipo: Arial-ItalicMT Família da fonte: sthe TC +-----> Tipo: Light-STHeitiTC +-----> Tipo: Medium-STHeitiTC Família da fonte: Hiragino Kaku Gothic Pron +-----> Tipo: HiraKakuProN-W6 +-----> Tipo: HiraKakuProN-W3 Família de fontes: Courier New +-----> Tipo: CourierNewPS-BoldMT +-----> Tipo: CourierNewPS-ItalicMT +-----> Tipo: CourierNewPS-BoldItalicMT +-----> Tipo: CourierNewPSMT Família da fonte: Zapfino +-----> Tipo: Zapfino Família de fonte: Arial Unicode MS +-----> Tipo: ArialUnicodeMS Família da fonte: sthe SC +-----> Tipo: Medium-STHeitiSC +-----> Tipo: Light-STHeitiSC Família da fonte: Typewriter americano +-----> Tipo: AmericanTypewriter +-----> Tipo: AmericanTypewriter-Bold Família de Fonte: Helvetica +-----> Tipo: Helvetica-Oblique +-----> Tipo: Helvetica-BoldOblique +-----> Tipo: Helvetica +-----> Tipo: Helvetica-Bold Família da fonte: Marker Felt +-----> Tipo: Thin-MarkerFelt Família de Fonte: Helvetica Neue +-----> Tipo: HelveticaNeue +-----> Tipo: HelveticaNeue-Bold Família da fonte: DB LCD Temp +-----> Tipo: DBLCDTempBlack Família da fonte: Verdana +-----> Tipo: Verdana-Bold +-----> Tipo: Verdana-BoldItalic +-----> Tipo: Verdana +-----> Tipo: Verdana-Italic Família da fonte: Times New Roman +-----> Tipo: TimesNewRomanPSMT +-----> Tipo: TimesNewRomanPS-BoldMT +-----> Tipo: TimesNewRomanPS-BoldItalicMT +-----> Tipo: TimesNewRomanPS-ItalicMT Família da fonte: Georgia +-----> Tipo: Georgia-Bold +-----> Tipo: Georgia +-----> Tipo: Georgia-BoldItalic +-----> Tipo: Georgia-Italic Família da fonte: sthe J +-----> Tipo: Medium-STHeitiJ +-----> Tipo: Light-STHeitiJ Família de fonte: Arial Rounded MT Bold +-----> Tipo: ArialRoundedMTBold Família da fonte: Trebuchet MS +-----> Tipo: TrebuchetMS-Italic +-----> Tipo: TrebuchetMS +-----> Tipo: Trebuchet-BoldItalic +-----> Tipo: TrebuchetMS-Bold Família da fonte: sthe K +-----> Tipo: Medium-STHeitiK +-----> Tipo: Light-STHeitiK |
iPhone FirstApp: Adivinhe o número - Parte 1
A primeira fonte que me levantei minhas mãos foi escrito em Basic e consistia de algumas linhas de código, para iluminar-me. Foi um jogo simples que gera um número aleatório de 1 a 10 e, através da entrada de teclado, verifique se o número digitado foi Maggioni, menor ou igual ao número aleatório. Apesar de sua simplicidade áspera permanece, para mim, um dos melhores exemplos - simples, divertido e prático - para explicar àqueles que não sabem nada sobre a programação que se entende realmente de "programa de computador". Então eu decidi propô-lo para o iPhone da Apple, talvez ajude alguém ...
Traço Actionscript, Objective-C NSLog ()
, usata per il debug delle applicazioni. Assumir o cargo de Actionscript para Objective-C (onde você comparar o código ActionScript e sintaxe e Objective-C), temos o recurso conveniente no ActionScript trace ( ) , usado para depurar aplicativos. Essa função gera um console no ambiente de desenvolvimento Adobe Flash. É usado principalmente para depuração e teste de "movie" / aplicação. Em C-Objetivo XCode / temos: NSLog ( ) . di Actionscript: A sintaxe desta função é muito semelhante ao do trace ( ) no ActionScript:
1 | "Sono una linea di debug" ) ; NSLog (@ "Eu sou a depuração de uma linha"); |
Em Actionscript temos:
1 | "Sono una linea di debug" ) ; trace ("I am a depuração de uma linha"); |
Além do uso do sinal (@), como você pode ver, são idênticos. As diferenças (e semelhanças) começam quando você deseja exibir valores de variáveis, por exemplo, em Actionscript temos:
1 2 3 | "Coordinata x:" + x + " coordinata y:" + y ) ; trace ("coordenada x:" + x + "coordenada y:" + y); / / Ou "Coordinate: " , x , y ) ; trace ("coordenadas", x, y); |
Em Objective-C, temos:
1 | "Coordinata x:%i coordinata y:%i" , x, y ) ; NSLog (@ "x-coordenar: a y%% coordenadas i", x, y); |
che opera sull'Apple System Log. Nota:
NSLog()realmente chama a função mais genéricaNSLogv ( )que opera sobre o log do sistema implementação. As funções são de fato idênticos, alterando apenas os parâmetros de entrada.
o sprintf ( ) . Os desenvolvedores irão encontrar muito familiarizado com a formatação de strings C, como acontece com printf ( ) ou sprintf ( ) . Para obter detalhes, consulte Especificadores de Formatação de String .








Últimos Comentários
Simon : Irrita perturbado novamente e usar esse espaço para essas coisas ... no entanto ele não funciona ...
Giovambattista Fazioli : @ Simon: o que poderia ser devido à sintaxe que usei, especificamente para PHP 5 +,...
Simon : Eu tentei colocar tudo na noite passada em functions.php, ok, formas jquery, e jQueryUI abas-los ...
Giovambattista Fazioli : @ Simon: Eu recomendo a limpeza de introduzir um código como esse em ...
Simon : @ Giovambattista Fazioli: Obrigado por sua paciência, é tudo claro ... agora eu me sinto agora, ...