Artigos com a tag 'Desenvolvimento'


PhpStorm 2,0

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 .

Continuação ...

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.

Continuação ...

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!

Continuação ...

Como definir XCode usar o iPhone em vez do simulador

Screencast

Continuação ...

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 ... :)

Continuação ...

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.

Continuação ...

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:

newproject

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:

deleteib

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.

Continuação ...

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):

iphonefonts

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

Continuação ...

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 ...

Continuação ...

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érica NSLogv ( ) 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 .

Continuação ...