Visualizzazione post con etichetta IOS. Mostra tutti i post
Visualizzazione post con etichetta IOS. Mostra tutti i post

martedì 8 luglio 2014

IBeacon ed aggiornamento IOS 7.1.2 su Iphone 4S


Sviluppando per beacon su IOS mi sono trovato di fronte ad una cosa piuttosto strana

Il medesimo codice che girava correttamente su un Iphone 5S si rifiutava di funzionare su Iphone 4S a parita' di IOS installato


Con l'uscita dell'aggiornamento ad IOS 7.1.2 tutto si e' risolto senza modificare nessuna parte del codice dell'applicazione

lunedì 7 luglio 2014

Beacon su IOS


A seguito delle prove effettuate in questo post ed in questo post (usando in entrambi i casi un telefono Moto G con Android e librerie Radius) mi sono convertito ad IOS ed ho ripetuto l'esperienza usando un IPhone 4S con le medesime antenne usate in precedenza e le API di IOS



non ho ancora capito bene il motivo ma sembra che il segnale risulta nettamente piu' stabile su IOS che su Android (hardware o software???)


da notare che al contrario di Android su IOS vengono segnalati come valori negativi le fallite acquisizioni

il codice impiegato per misurare il segnale e' riportato in seguito (ripreso da questo link dall'esempio Art Gallery)

#import "ViewController.h"

#define ESTIMOTE_PROXIMITY_UUID [[NSUUID alloc] initWithUUIDString:@"4506F9C7-00F9-C206-C12C-C2F9C702D3C3"]

int oldminor;

@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *beacons;
@property (nonatomic, strong) NSArray *paintings;
@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) CLBeaconRegion *beaconRegion;


@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
_beacons = [[NSMutableArray alloc] init];
    
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;
    
    _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID
                                                       identifier:@"lucainnoc.Ibeareader"];
}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)viewDidAppear:(BOOL)animated
{
    [_locationManager startRangingBeaconsInRegion:_beaconRegion];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [_locationManager stopRangingBeaconsInRegion:_beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
    if (beacons.count) {
        
        CLBeacon *closestBeacon;
        
        for (CLBeacon *beacon in beacons) {
         
            NSLog([NSString stringWithFormat:@"%f", beacon.accuracy]);
            
           
        }

    }
    
}



@end

Webview su IOS

Per poter implementare una WebView su IOS, dopo aver trascinato il componente WebView, si dichiara il nuovo componente come

@interface ViewController : UIViewController
{
    IBOutlet UIWebView *Vista;


}



In questo caso la web view si chiamera' Vista
Per modificare la URL a cui punta la webview si agisce con il seguente comando

[Vista loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];

Attenzione: di default la webview occupa tutto lo schermo per cui non sono visibile gli altri eventuali controlli (tipo pulsanti o label)

lunedì 7 aprile 2014

Soil Color Chart per IOS

Vista la semplicita' ho effettuato il porting di Soil Color Chart anche per IOS mediante Phonegap
In questo caso la compilazione e' stata estremamente lineare
Il codice sorgente puo' essere scaricata da questo link







mercoledì 2 aprile 2014

Hello World su Ios

Giusto un promemoria per me stesso su come compilare Hello World su IOS (piu' che altro perche' alcune azioni sono visive ed e' difficile descriverle senza un video



-----------------------------------------------------------------
- (IBAction)premi:(id)sender{
    NSString *const saluto = @"Hello World";
    hello.text = saluto;
}

-----------------------------------------------------------------
{
    IBOutlet UILabel *hello;
}
- (IBAction)premi:(id)sender;

mercoledì 29 gennaio 2014

Mandelbrot su IPhone/IOS

Per disegnare Mandelbrot su un Iphone per prima cosa si deve trovare una superficie su cui disegnare.
Scartata l'ipotesi di OpenGL (troppo complicata), la cosa piu' semplice e' utilizzare la libreria Quartz 2D facendo un subclass di UIView (per il dettaglio seguire questo link)




Questo puo' essere effettuato con i seguenti comandi (partendo da un progetto vuoto con View-Based Application)
File -> Add Files to 
si seleziona Objective-C Class e in basso si seleziona SubClass of UIView
Si seleziona un nome per la nuova classe e si conclude

In seguito dall'Interface Builder (il creatore di interfacce visuali) si seleziona tutta la finestra (UIView), si preme Command+4 e si modifica la classe da UIView con il nome precedentemente selezionato

Fatto cio' si trova che nel file miaclasse.m un scheletro vuoto di una funzione drawRect.Qui si puo' inserire il codice per la generazione dell'insieme di Mandelbrot

------------------------------------------------------------
//
//  Draw2D.m
//  Mand
//
//  Created by Luca Innocenti on 27/01/14.
//  Copyright (c) 2014 Luca Innocenti. All rights reserved.
//

#import "Draw2D.h"

@implementation Draw2D

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

    
    int SCREEN_WIDTH = 480;
    int SCREEN_HEIGHT = 320;
    
    float re_min = -2.0;
    float im_min = -1.2;
    float re_max = 1.0;
    float im_max = 1.2;
    int iterazioni = 60;
    float a,b;
    float x,y,x_new,y_new;
    int test;
    int k,j,i;
    
    float re_factor = (re_max-re_min);
    float im_factor = (im_max-im_min);
    for (i=0;i<SCREEN_HEIGHT;i++)
    {
        for (j=0;j<SCREEN_WIDTH;j++)
        {
            a = re_min+(j*re_factor/SCREEN_WIDTH);
            b = im_min+(i*im_factor/SCREEN_HEIGHT);
            x = 0;
            y = 0;
            test = 0;
            for (k=0;k<iterazioni;k++)
            {
                x_new = (x*x)-(y*y)+a;
                y_new = (2*x*y)+b;
                if (((x_new*x_new)+(y_new*y_new))>4)
                {
                    test = k;
                    if (k%2)
                    {
                        CGContextMoveToPoint(context, i, j);
                        CGContextAddLineToPoint(context, i+1,j);
                        CGContextStrokePath(context);
                    }
                    break;
                }
                x = x_new;
                y = y_new;
            }
        }
    }
}

@end
--------------------------------------------------------------


Opencv camera calibration in cpp

Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...