gpt4 book ai didi

ios - React Native 中的原生 iOS View

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:13 25 4
gpt4 key购买 nike

我正在使用 react-native 为 google DFP 构建原生 View 。我真的离成功很近了,但还缺少一点东西。

DFPAdViewManager.m:

#import "DFPAdView.h"
#import <UIKit/UIKit.h>
#import "DFPAdViewManager.h"

@implementation DFPAdViewManager

RCT_EXPORT_MODULE();

RCT_EXPORT_VIEW_PROPERTY(adUnitId, NSString)
RCT_EXPORT_VIEW_PROPERTY(adHeight, int)
RCT_EXPORT_VIEW_PROPERTY(adWidth, int)


- (UIView *)view
{
DFPAdView * theView;
theView = [[DFPAdView alloc] init];
return theView;
}

@end

DFPAdView.m:

#import "DFPAdView.h"

@import GoogleMobileAds;

@implementation DFPAdView
{
DFPBannerView *bannerView;
}

- (instancetype)init
{
self = [super init];
bannerView = [DFPBannerView alloc];
return self;
}

- (void)setAdHeight:(int*)adHeight
{
self.adHeight = adHeight;
}

- (void)setAdWidth:(int*)adWidth
{
self.adWidth = adWidth;
}

- (void)setAdUnitId:(NSString*)adUnitId
{

GADAdSize customAdSize = GADAdSizeFromCGSize(CGSizeMake(self.adWidth, self.adHeight));
bannerView = [[DFPBannerView alloc] initWithAdSize:customAdSize];
[self addSubview:bannerView];

UIViewController *controller = [[UIViewController alloc] init];
bannerView.adUnitID = adUnitId;
bannerView.rootViewController = controller;
DFPRequest *request = [DFPRequest request];
[bannerView loadRequest:request];
}

@end

我的问题是如何使用从 JavaScript 获得的 adHeight 和 adWidth 的大小创建我的 bannerView?我认为这只是 Objective-C 代码中的一个小改动,但我不知道也没有找到执行此操作的方法。

最佳答案

所以我让它有点不同。

这是我的 DFPBannerViewManager.m:

#import "RCTViewManager.h"
#import "GADBannerViewDelegate.h"

@interface DFPViewManager : RCTViewManager <GADBannerViewDelegate>

- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER;

@end

@import GoogleMobileAds;
@implementation DFPViewManager {
DFPBannerView *bannerView;
}

RCT_EXPORT_MODULE()

- (UIView *)view
{

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;

bannerView = [[DFPBannerView alloc] initWithAdSize:kGADAdSizeBanner];
bannerView.delegate = self;
bannerView.rootViewController = rootViewController;
bannerView.alpha = 1;

[bannerView loadRequest:[DFPRequest request]];
return bannerView;

}

RCT_EXPORT_VIEW_PROPERTY(adUnitID, NSString)


- (void)adViewDidReceiveAd:(DFPBannerView *)adView {
[self.bridge.eventDispatcher sendAppEventWithName:@"onSuccess"
body:@{@"name": @"onStop"}];
[UIView animateWithDuration:1.0 animations:^{
adView.alpha = 1;
}];
}

@end

这里是我的 AdView.ios.js:

'use strict';

import React from 'react';

import {
View,
requireNativeComponent,
NativeAppEventEmitter,
Dimensions,
LayoutAnimation,
Text
} from 'react-native';

let window = Dimensions.get('window');

class AdView extends React.Component {

constructor() {
super();

this.state = {
adHeight: 0,
adWidth: 0
};
}

componentWillMount() {
let adSize = JSON.parse(this.props.row.params.format);

NativeAppEventEmitter.addListener('onSuccess', (event) => {
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
this.setState({
adHeight: adSize[1] + 60,
adWidth: window.width
});
});
}

render() {



if(this.props.row.params) {

let adSize = JSON.parse(this.props.row.params.format);

let ad = (
<View style={{justifyContent: 'center', alignItems: 'center', height: this.state.adHeight, width: this.state.adWidth}}>
<View style={{marginLeft: adSize[0]-30, marginTop: 30}}>
<Text style={{color: 'lightgray', fontSize: 10}}>Anzeige</Text>
</View>
<DFPAdView
style={{width: adSize[0], height: adSize[1], marginLeft: 30, marginRight: 30, marginBottom: 30}}
adUnitID={this.props.row.params.name} />
</View>
);

return ad

} else {
return <View />;
}

}

}

AdView.propTypes = {

/**
* This property contains the adUnitID. This ID could be found in the
* google DFP console and it's formatted like this: "/123456/bannerexample".
* It's required to display an ad
* @type {string}
*/
adUnitID: React.PropTypes.string,

/**
* This property contains the adSize. The first param is the width, the second the height.
* It's required to display the correct adSize
* @type {JSON Object}
*/
adSize: React.PropTypes.array

};



var DFPAdView = requireNativeComponent('DFPView', AdView);

module.exports = AdView;

也许有人对此有所了解,甚至有更好的解决方案。如果你有更好的解决方案,分享给我,我不会不高兴

关于ios - React Native 中的原生 iOS View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34742014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com