Mostrando postagens com marcador Objective C. Mostrar todas as postagens
Mostrando postagens com marcador Objective C. Mostrar todas as postagens

segunda-feira, 24 de julho de 2017

Dicas de Programação: Fazendo animações simples em Objective-C (iOS)

Para fazer uma animação no iOS em Objective-C, você pode usar qualquer propriedade "animável", de qualquer componente, que herde de UIView, através da função estática da classe UIView, chamada animateWithDuration:animations:completion:. Exemplo:

//A cor inicial da tela é verde
self.view.backgroundColor = [UIColor greenColor];
//Em dois segundos, faça
[UIView animateWithDuration:2.0 animations:^{
     //A tela troca de cor até que ela esteja da cor vermelha
     self.view.backgroundColor = [UIColor redColor];
} completion: ^(BOOL finished) {
    //Executa depois que terminar a animação
    NSLog(@"Terminou a animação...");
}];

Simples, não?

Até mais!

terça-feira, 18 de abril de 2017

Dicas de Programação: Transformando um objeto UIImage em base64 (NSString) em Objective-C

Uma dica de um amigo meu. :)

Para transformar um objeto UIImage em um base64 é só utilizar a função UIImagePNGRepresentation e o método base64EncodedStringWithOptions da classe NSData.

Exemplo:

UIImage* image = ...;
...
//Transforma a UIImage em um NSData (formato PNG)
//Obs.: Utilizar UIImageJPEGRepresentation se for JPG
NSData* data = UIImagePNGRepresentation(image);
//Converte o NSData para base64
NSSString* base64 = [data base64EncodedStringWithOptions:0];
...

Valeu Diego!

Até mais!

quinta-feira, 2 de março de 2017

Dicas de Programação: Passando parâmetro por referência em Objective-C

Para poder passar um parâmetro por referência em Objective-C é muito parecido com C/C++... É só colocar um asterisco a mais no parâmetro da função e passar a variável com "E" comercial (&):

- (void) instanciarObjeto:(NSObject**) obj {
         *obj = [[NSObject alloc] init];
}

...
        NSObject* obj = nil;
        [self instanciarObjeto:&obj];
        NSLog(@"Instancia: %@", obj);
...

Valeu pela dica, Daniel Breves! ;)

domingo, 26 de fevereiro de 2017

Dicas de Programação: Criando um custom UIView em Objective-C (iOS)

Faz tempo que não dou dicas de programação (vai ver, estou preguiçoso...), então achei melhor voltar com isso... :)

Vamos tentar, de maneira simples, criar um componente customizado em Objective-C.

Para isso, a maneira mais simples é herdar da classe UIView e reescrever o método drawRect:

//interface RTCustomView.h
#import

@interface RTCustomView : UIView
//Criando propriedade "inspecionável" para a cor da elipse
@property IBInspectable (strong, nonatomic) UIColor* ellipseColor;
@end

//implementação RTCustomView.m
#import "RTCustomView.h"
@implementation RTCustomView
- (void) drawRect:(CGRect) rect {
       //Chama o método reescrito da classe pai
       [super drawRect:rect];
       //Obtém o contexto gráfico atual
       CGContextRef currentContext = UIGraphicsGetCurrentContext();
       //Utiliza a cor passada pela propriedade da classe
       CGContextSetFillColorWithColor(currentContext, self. ellipseColor.CGColor);
       //Desenha a elipse do tamanho da tela
       CGContextFillEllipseInRect(currentContext, rect);
       //Atualiza o contexto gráfico
       CGContextFlush(currentContext);
       //Desaloca a memória da variável currentContext
       CGContextRelease(currentContext);
}
@end

Pronto, você tem um componente customizado que faz uma elipse. :)

Até mais!

terça-feira, 11 de dezembro de 2012

Dicas de Programação: Existe try catch em Objective-C?

Existe sim! Vamos ao código de exemplo:

//Código que pode dar exceção
@try {
     NSInteger a  = 1;
      ...
     if (a > 0) {
          //Lanço a exceção
         @throw [NSException exceptionWithName: @"GenericException" reason: @"Exceção Genérica" userInfo: nil];
    }
}
//Se der exceção, executo o código abaixo...
@catch (id theException) {
         NSLog(@"%@", theException);
}
//As instruções abaixo sempre executam, lançando ou não exceção
@finally {
        NSLog(@"Fim da instrução");
}

No final, ficou parecido com Java... :P

Até mais!

sábado, 17 de março de 2012

Dicas de Programação: Como programar em Objective-C sem um Mac?

Fácil, usando o compilador GCC com o Objective-C ativo.

Para saber mais, você pode ir ao site da GNU:
http://gcc.gnu.org/
Como este compilador geralmente vem em sistemas Like-Unix não é preciso baixa-lo (talvez, baixar o "modulo" para Objective-C, mas acho que dá para fazer via apt-get ou outro "gerenciador"...)

Agora, para o MS-Windows, você pode obter a ferramenta baixando deste site:
http://www.mingw.org/
O MinGW é um conjunto de ferramentas de desenvolvimento da GNU para o sistema MS-Windows (que inclui o gcc).

Não tem mais desculpa de aprender esta linguagem...

Agora, se dá para criar aplicativos para iOS em outro sistema operacional que não for o da Apple, isso é outra história...

Pelo menos, é meio caminho andado. :)

Até mais!

quarta-feira, 14 de março de 2012

Dicas de Programação: Como executar um javascript no iOS?

Para executar um javascript no iOS, basta criar uma instância/objeto da classe UIWebView e chamar o método stringByEvaluatingJavaScriptFromString.
Vamos ao exemplo:

//Reescrevendo o método viewDidAppear da classe UIViewController (controle da tela)
- (void) viewDidAppear:(BOOL)animated
{
    //Chamando o método da classe herdada (pai)
    [super viewDidAppear: animated];
    //"Aloca memória" - Instância o objeto
    UIWebView* webView = [[UIWebView alloc] init];
    //Abre uma caixa de prompt (javascript)
    NSString* address = [webView stringByEvaluatingJavaScriptFromString: @"prompt('Entre com um IP:')"];
    //Loga o valor da variável address
    NSLog(@"%@", address);
    //"Desaloca memória"
    [webView release];
}

Simples não? O mais legal é que dá para carregar uma página e percorrer ela pelas funções DOM:

...
@synthesize  webView;
...
- (void) viewDidLoad
{
     //Chamando o método da classe herdada (pai)
     [super viewDidLoad];
     //Instância para o objeto webView
     webView = [[UIWebView alloc] init];
     //Objeto instanciado url
     NSURL* url = [NSURL URLWithString: @"http://blogdotakemura.blogspot.com"];
     //Objeto instanciado request
     NSURLRequest* request = [NSURLRequest requestWithURL: url];
     //Setando o objeto que implementa o protocolo UIWebViewDelegate
    self.webView.delegate = self;
    //Carregando a página da URL
    [self.webView loadRequest: request];
}
...
//Método implementado do protocolo UIWebViewDelegate
- (void) webViewDidFinishLoad: (UIWebView*) wv
{
    NSString* titulo  = [self.webView stringByEvaluatingJavaScriptFromString: @"document.getElementsByTagName('h1')[0].innerHTML"];
    NSLog(@"%@", titulo);
}
...
- (void)viewDidUnload
{
       [super viewDidUnload];
       self.webView = nil;
}
...

Até mais!

quinta-feira, 19 de janeiro de 2012

Dicas de Programação: "Adicionando" métodos em Classes Nativas (Objective C)

Essa eu aprendi com um cara aqui da empresa. :)

Sempre que precisava de um método novo em uma classe que já existia em Java, eu tinha que criar uma nova classe que herdava desta e criar o método:

public class MyArrayList extends ArrayList {
          public void sort() {
          ...
          }
}

Para usar, tinha que substituir a instância para esta classe:

//De: ArrayList a = new ArrayList(); 
//Para:
MyArrayList a = new MyArrayList();
a.sort();

Mas em Objective C existe uma coisa interessante, se eu quiser criar um método em uma classe já existente, basta colocar uma "categoria" para ela. Por exemplo: quero criar um método chamado parseJSON na classe NSString (que já existe na API da Apple):

/*
 * NSString+JSON.h
 */
@interface NSString (NSString_JSON)
- (NSDictionary*) parseJSON;
@end

/*
 * NSString+JSON.m
 */
@implementation NSString (NSString_JSON)
- (NSDictionary*) parseJSON
{
...
}
@end

Agora, qualquer objeto do NSString possue este método (sem eu precisar mudar a classe da variável!):
NSString* str = @"{a:1, b:2}";
NSDictionary* dict = [str parseJSON];

Muito interessante... :)
Valeu, Koga, pela dica!

Até mais!

terça-feira, 2 de agosto de 2011

Dicas de Programação: Como "chamar" o telefone no iPhone em Objective C?

Pelo que me disseram (tentei testar no emulador, mas não funciona... :P), é só criar uma "URL" com o protocolo "tel:" mais o número do telefone. Exemplo:

...
//Cria o objeto NSURL com uma String ("protocolo:numero_do_telefone")
NSURL* phoneURL = [NSURL URLWithString: @"tel:1234567890"];
//Chama a aplicação externa para abrir a URL
[[UIApplication sharedApplication] openURL: phoneURL];
...

Também é possivel criar uma página web para iPhone, com o mesmo protocolo:

...
<a href="tel:1234567890">Ligue-me</a>
...

Sei lá, tomara que isso ajude alguém... :)

Até mais!

sexta-feira, 29 de julho de 2011

Dicas de Programação: Enum em Objective C

Estou fazendo um curso de Objective C e me surpreendi que a maioria das estruturas em C podem ser utilizadas nesta linguagem.

Portanto, você pode criar um tipo struct do mesmo jeito em C:

typedef struct Usuario {
char* nome;
char* senha;
} Usuario;

E também um tipo enumerado:

typedef enum Estado {
AC,
AM,
AP,
SP
} Estado;

Utilizando estas, do mesmo jeito que você utiliza em C:

+(NSString*) obtemNomeEstado: (Estado) estado {
switch (estado) {
case AC: return @"Acre"; break;
case AM: return @"Amazonas"; break;
}
return nil;
}

Legal, não? :)

Até mais!