gpt4 book ai didi

ios - 在适用于 iOS 的 Adob​​e native 扩展中显示和定位 UISwitch 或任何 UIView

转载 作者:行者123 更新时间:2023-11-28 17:38:40 26 4
gpt4 key购买 nike

我正在为 iOS 编写一个简单的 Adob​​e 原生扩展。

它所做的一切都显示了一个 UISwitch。

但是,当我尝试在该 UISwitch(或这段代码中的任何 UIView)上设置 setFrame 或什至访问 UISwitch 的框架时,应用程序会出现错误的内存访问崩溃错误。UISwitch 本身不是零,因为在其上调用 setOn 有效,如果我不尝试在其上调用 setFrame、设置其中心或定位,UISwitch 确实会显示在屏幕上以任何方式。

这是代码。有问题的功能是第一个:showSwitch()

#import "FlashRuntimeExtensions.h"
#import <UIKit/UIKit.h>

FREObject showSwitch(FREContext context,
void* functionData,
uint32_t argc,
FREObject argv[])
{
int32_t isOn;
FREGetObjectAsInt32(argv[0], &isOn);

id delegate = [[UIApplication sharedApplication] delegate];
UIWindow* window = [delegate window];

// The following will segfault
// UISwitch* switchControl = [[[UISwitch alloc] initWithFrame:CGRectMake(100, 100, 0, 0)];

// This works fine.
UISwitch* switchControl = [[[UISwitch alloc] init] retain];

// This will segfault as well
// [switchControl setFrame:CGRectMake(100, 100, switchControl.frame.size.width, switchControl.frame.size.height)];

[switchControl setOn:(isOn == 1)]; // switchControl is not nil, because this works.
[window addSubview:switchControl];

return NULL;
}

void ContextFinalizer(FREContext context)
{
return;
}

void ContextInitializer(void* extensionData,
const uint8_t* contextType,
FREContext context,
uint32_t* numFunctionsToTest,
const FRENamedFunction** functionsToSet)
{
*numFunctionsToTest = 1;

FRENamedFunction* function = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*1);
function[0].name = (const uint8_t*)"showSwitch";
function[0].functionData = NULL;
function[0].function = &showSwitch;

*functionsToSet = function;

}

void ExtensionInitializer(void** extensionDataToSet,
FREContextInitializer* contextInitializerToSet,
FREContextFinalizer* contextFinalizerToSet)
{
*extensionDataToSet = NULL;
*contextInitializerToSet = &ContextInitializer;
*contextFinalizerToSet = &ContextFinalizer;
}

void ExtensionFinalizer(void* extensionData)
{
return;
}

最佳答案

我在向窗口添加 View 时遇到了同样的问题,经过大量搜索和测试后我找到了这个解决方案,它可以帮助遇到同样问题的任何人。

以这种方式添加您的 subview :

[[[[UIApplication sharedApplication] keyWindow] rootViewController].view addSubview: switchControl];

关于ios - 在适用于 iOS 的 Adob​​e native 扩展中显示和定位 UISwitch 或任何 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023696/

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